重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

例外をthrowしたいとき、以下の場合、IllegalArgumentException、FileNotFoundException、どちらを使用していいのかわかりません。

public static void main(String[] args){
try{
AAA(new File(args[0]));
}catch(FileNotFoundException e){
System.out.println(e.getMessage);
}
e)catch(IllegalArgumentException e){
System.out.println(e.getMessgae());
}
}
public static void AAA(File file){
if(isFile()){
//処理
}else{
throw new IllegalArgumentException("引数が不正です");
   //それともthrow new FileNotFoundException("ファイルが存在しません");
}
}

A 回答 (7件)

すいません。

先程のMainClass部分まだ間違いありましたので修正しました。
以下のコードが正しいコードです。

public class MainClass
{
  public static void main(String[] args)
  {
    try
    {
      Mainclass mcl = new MainClass();
      // 入力チェック
      mcl.inputCheck(args[0]);
      // ファイル処理
      mcl.AAA(new File(args[0]));
    }
    catch(FileNonExitException e)
    {
      // ファイル例外エラー
      System.out.println(e.toString());
    }
    catch(NoArgmentException e)
    {
      // 引数指定エラー
      System.out.println(e.toString());
    }
  }
}
    • good
    • 0

失礼しました。

先程のMainClass部分修正します。

public class MainClass
{
  public static void main(String[] args)
  {
    try
    {
      Mainclass mcl = new MainClass();
      // 入力チェック
      inputCheck(args[0]);
      // ファイル処理
      AAA(new File(args[0]));
    }
    catch(FileNonExitException e)
    {
      // ファイル例外エラー
      System.out.println(e.toString());
    }
    catch(NoArgmentException e)
    {
      // 引数指定エラー
      System.out.println(e.toString());
    }
  }
}
    • good
    • 0

AAAメソッドの中での例外をthrowするときはFileNotFoundExceptionを使った方がいいです。



あと、コードは以下のようにしてもいいかと思います。
引数判定とファイル判定につきましては自作例外クラスにて処理するようにしました。

public class MainClass
{
  public static void main(String[] args)
  {
    try
    {
      Mainclass mcl = new MainClass();
      // 入力チェック
      inputCheck(String filename);
      // ファイル処理
      AAA(new File(args[0]));
    }
    catch(FileNonExitException e)
    {
      // ファイル例外エラー
      System.out.println(e.toString());
    }
    catch(NoArgmentException e)
    {
      // 引数指定エラー
      System.out.println(e.getMessgae());
    }
  }
}
// 入力チェック
public static void inputCheck(String filename)
{
  if(filename.length() == 0)
  {
    throw new NoArgmentException("ファイル名が入力されていません。");
  }
}
// ファイル処理
public static void AAA(File file)
{
  if(file.isFile())
  {
    //処理
  }
  else
  {
    throw new FileNonExitException("ファイルが存在しません");
  }
}

(2) 例外クラスを記述しておきます

public class FileNonExitException extends RuntimeException
{
  private static final long serialVersionUID = 1;

  // フィールド
  private final String nochstr = "ファイルがありません。";
  private String    messtr;

  // コンストラクタ
  public FileNonExitException()
  {
    // TODO 自動生成されたコンストラクター・スタブ
    messtr = nochstr;
  }
  public FileNonExitException(String mes)
  {
    // TODO 自動生成されたコンストラクター・スタブ
    messtr = mes;
  }
  public String toString()
  {
    return messtr;
  }
}

public class NoArgmentException extends RuntimeException
{
  private static final long serialVersionUID = 1;

  // フィールド
  private final String nochstr = "引数指定が不正です。";
  private String    messtr;

  // コンストラクタ
  public NoArgmentException()
  {
    // TODO 自動生成されたコンストラクター・スタブ
    messtr = nochstr;
  }
  public NoArgmentException(String mes)
  {
    // TODO 自動生成されたコンストラクター・スタブ
    messtr = mes;
  }
  public String toString()
  {
    return messtr;
  }
}
    • good
    • 0

ああ、失礼しました。



if(args.length == 0){
// 先に引数のチェック今回は空の場合は引数不正とする。
throw new IllegalArgumentException("引数が不正です");
}

ではなく

if(args.length == 0){
System.out.println("USAGE:このアプリの使い方");
return;
} else if (args[0].length() == 0){
// 先に引数のチェック今回は空の場合は引数不正とする。
throw new IllegalArgumentException("引数が不正です");
}

こうすべきでしたね。
まだ細かなミスがあるかもしれません。。。
    • good
    • 0

こんにちわ。



何をするのかはともかく、タイトルの例外を使うのであれば私なら以下のように使いますね。

public static void main(String[] args) {
try {
if(args.length == 0){
// 先に引数のチェック今回は空の場合は引数不正とする。
throw new IllegalArgumentException("引数が不正です");
}
AAA(new File(args[0]));
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
} catch (自作例外 e){
System.out.println(e.getMessage());
}
}

public static void AAA(File file) throws FileNotFoundException {

if(!file.exists()){
// ここでファイルの有無チェック
throw new FileNotFoundException("ファイルが存在しません");
}
if (file.isFile()) {
// 処理
} else {
throw new 自作例外("ファイルではありません。");
}
}
    • good
    • 0

ディレクトリを渡した場合はどの例外が適切だと思いますか?


java.io.File#isFile()ならfalseです
NotFound、存在しない訳じゃありません

Fileクラスでないものを渡したら?

この回答への補足

ありがとうございます。

>ディレクトリを渡した場合はどの例外が適切だと思いますか?
調べましたが、わかりません。

>java.io.File#isFile()ならfalseです
>NotFound、存在しない訳じゃありません
 はい、あくまで普通のファイル以外は例外を出すようにしています。

>Fileクラスでないものを渡したら?
 この質問がわかりません。教えてください。

補足日時:2008/12/25 08:59
    • good
    • 0

作っているクラスの全容が全く(Fileクラスを継承して独自のFileクラスを作ろうとしているのかな?)見えてこないので確かな回答はできません。


そもそも、IllegalArgumentExceptionをスローする場合、引数は何になると思いますか?引数のチェックを行っていないのにこの例外を起こすのはちょっとおかしいですね。

オリジナルのクラスを作るのであれば、オリジナルの例外を作った方が可用性に富むと思います。

参考URL:http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ …

この回答への補足

ありがとうございます。
>IllegalArgumentExceptionをスローする場合、引数は何になると思いますか?
考えましたが、わかりません。

>オリジナルのクラスを作るのであれば、オリジナルの例外を作った方が可用性に富むと思います。
確かにそうですね。自分で作成したら、しっくりきました。

補足日時:2008/12/25 09:02
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!