1

Java代入のファイル操作の例外処理用のサンプルプログラムを作成することになっています。私はC++の人なので、理解するのに苦労しています。誰かが以下の私のコードの欠陥を指摘することができれば、それは本当に非常に役に立ちます。この記事を参照しています。Eclipseは、「FileNotFoundExceptionの到達不能なcatchブロック。この例外は、tryステートメントの本体からスローされることはありません」というエラーを表示します。

import java.io.*;

public class file {

    public static void main(String[] args) {
        String arg1 = args[0];
        String arg2 = args[1];
        System.out.println(arg1);
        System.out.println(arg2);
        File f1, f2;

        try {
            f2 = new File(arg2);
            f1 = new File(arg1);
        }
        catch(FileNotFoundException e) {
        /*
            if(!f1.exists()) {
                System.out.println(arg1 + " does not exist!");
                System.exit(0);
            }
            if(!f2.exists()) {
                System.out.println(arg2 + " does not exist!");
                System.exit(0);
            }


            if(f1.isDirectory()) {
                System.out.println(arg1 + " is a Directory!");
                System.exit(0);
            }
            if(f2.isDirectory()) {
                System.out.println(arg2 + " is a Directory!");
                System.exit(0);
            }

            if(!f1.canRead()) {
                System.out.println(arg1 + " is not readable!");
                System.exit(0);
            }
            if(!f2.canRead()) {
                System.out.println(arg2 + " is not readable!");
                System.exit(0);
            }*/
        }
    }
}
4

2 に答える 2

14

File呼び出しているコンストラクターのドキュメントを参照してください。スローするように宣言されている唯一の例外はNullPointerException. したがって、 をスローできないFileNotFoundExceptionため、エラーが発生します。try対応するブロック内で決してスローされないことをコンパイラーが証明できるチェック済み例外をキャッチしようとすることはできません。

オブジェクトを作成しFileても、その存在はチェックされません。ファイルを開いnew FileInputStream(...)ている場合 (たとえば、 thenFileNotFoundException使用すると、オブジェクトを作成するだけでなく、スローされる可能性がありFileます。

于 2012-11-06T17:34:46.700 に答える
2

これは、File1つの引数を持つクラスのコンストラクターが原因です。

public File(String pathname)  
Parameters:pathname - A pathname string Throws: NullPointerException - If the pathname argument is null
Throws: NullPointerException - If the pathname argument is null

例外を1つだけスローし、それはNullPointerExceptionです。FileNotFoundExceptionコードはに関連しないをキャッチしようとしNullPointerExceptionます。これが、Eclipseでこのエラーが発生する理由です。

1つの方法は、Javaのすべての例外Exceptionのクラスであるクラスの例外をキャッチすることです。superもう1つの方法はcatch、呼び出されたコンストラクトがスローするすべての例外(それぞれ異なるブロック内)をキャッチすることです(APIを介して簡単に取得できます)。3番目のアプローチは、アプリケーションにとって意味のある例外(これも実際には構成によってスローされます)のみをキャッチし、他の例外を無視することです。

于 2012-11-06T17:39:09.083 に答える