
例外を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件)
- 最新から表示
- 回答順に表示
No.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());
}
}
}
No.6
- 回答日時:
失礼しました。
先程の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());
}
}
}
No.5
- 回答日時:
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;
}
}
No.4
- 回答日時:
ああ、失礼しました。
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("引数が不正です");
}
こうすべきでしたね。
まだ細かなミスがあるかもしれません。。。
No.3
- 回答日時:
こんにちわ。
何をするのかはともかく、タイトルの例外を使うのであれば私なら以下のように使いますね。
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 自作例外("ファイルではありません。");
}
}
No.2
- 回答日時:
ディレクトリを渡した場合はどの例外が適切だと思いますか?
java.io.File#isFile()ならfalseです
NotFound、存在しない訳じゃありません
Fileクラスでないものを渡したら?
この回答への補足
ありがとうございます。
>ディレクトリを渡した場合はどの例外が適切だと思いますか?
調べましたが、わかりません。
>java.io.File#isFile()ならfalseです
>NotFound、存在しない訳じゃありません
はい、あくまで普通のファイル以外は例外を出すようにしています。
>Fileクラスでないものを渡したら?
この質問がわかりません。教えてください。
No.1
- 回答日時:
作っているクラスの全容が全く(Fileクラスを継承して独自のFileクラスを作ろうとしているのかな?)見えてこないので確かな回答はできません。
そもそも、IllegalArgumentExceptionをスローする場合、引数は何になると思いますか?引数のチェックを行っていないのにこの例外を起こすのはちょっとおかしいですね。
オリジナルのクラスを作るのであれば、オリジナルの例外を作った方が可用性に富むと思います。
参考URL:http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ …
この回答への補足
ありがとうございます。
>IllegalArgumentExceptionをスローする場合、引数は何になると思いますか?
考えましたが、わかりません。
>オリジナルのクラスを作るのであれば、オリジナルの例外を作った方が可用性に富むと思います。
確かにそうですね。自分で作成したら、しっくりきました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングの問題です。大...
-
javaのプログラミングで作るRPG...
-
ArrayList でスタックを
-
Javaのバージョンについて
-
java iを1づつ増やすプログラ...
-
TCPプログラミング
-
randomで
-
元旦からの経過日数を求めたい
-
クラスを使った電卓のプログラム
-
【java】同ディレクトリ別ファ...
-
Timerについて教えて下さい
-
ボタンの複数割り当てについて
-
C# JSONについて
-
数値⇒漢数字変換 java
-
Java コレクション・ジェネリク...
-
[Javascript]エンターキー押下...
-
フラクタルで雲を作る。
-
テキストファイルから空白行をよむ
-
マシンによってURLEncoder.enco...
-
動的配列が存在(要素が有る)か...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数を動的に利用するには?
-
Javaでlog4jを使ってログ出力を...
-
プログラミングの問題です。大...
-
中カッコ{}だけの記述について
-
System.exit()の値を取得したい
-
Java プログラム public class ...
-
JSP/Servletのパラメータの受け...
-
C# DatagridviewにExcelシート...
-
Javaで日本語の出力が文字化けする
-
コンストラクタの引数の中のnew?
-
javaで特定の文字列から特定の...
-
Socketの接続のタイムアウトを...
-
NoSuchMethodErrorが解決できま...
-
ArrayList でスタックを
-
他ファイルで定義された自作例...
-
日本語が出力できない
-
日本語が文字コードによっては...
-
randomで
-
インタフェイス実装と抽象クラ...
-
じゃんけん プログラミング
おすすめ情報