FileNotFoundException対策
ここでは、FileNotFoundExceptionが発生する2つの場合について、
解説します。
samples/exception/io/FileNotFoundExceptionTest.java - Eclipse SDK
|
package samples.exception.io;
import java.io.File;
import java.io.FileInputStream;
public class FileNotFoundExceptionTest {
public static void main(String[] args) {
try {
File file = new File("C:/XXXXXXXXXXXXXXXXXXXXXX");
System.out.println(file.exists());
FileInputStream is = new FileInputStream(file);
is.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
File file = new File("C:/Program Files");
System.out.println(file.exists());
FileInputStream is = new FileInputStream(file);
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
|
|
まずは、サンプルを実行してみましょう。
コマンド プロンプト
|
C:\JavaMaster\bin>java -cp . samples.exception.io.FileNotFoundExceptionTest
false
java.io.FileNotFoundException: C:\XXXXXXXXXXXXXXXXXXXXXX (指定されたファイルが見つかりません。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at samples.exception.io.FileNotFoundExceptionTest.main(FileNotFoundExceptionTest.java:11)
true
java.io.FileNotFoundException: C:\Program Files (アクセスが拒否されました。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at samples.exception.io.FileNotFoundExceptionTest.main(FileNotFoundExceptionTest.java:20)
|
1つ目のtry〜catch の部分では、存在しないファイルについて
Fileオブジェクトを作成しています。
そして、ファイルが存在するかどうかを確認するexistsメソッドを
呼び出し、その結果を表示しています。
この時点ではまだ例外が発生していないことに注意してください。
その後、FileInputStreamオブジェクトを作ろうとしたところで、
例外が発生しています。
スタックトレースをよく見ると、FileInputStreamコンストラクタにて
openメソッドが呼ばれ、そこで例外が発生しているようです。
2つ目のtry〜catch では、ファイルではなく、存在するフォルダに
対して、1つ目の例と同様にFileInputStreamを作成しようとしています。
この場合は、FileNotFoundException例外の説明文として、
「指定されたファイルが見つかりません。」ではなく、
「アクセスが拒否されました。」と表示されています。
以上のように、ファイルやフォルダに対して
Fileオブジェクトを作るところまでは問題ないのですが、
それに対して不適切な操作を実行しようとしたときに、
FileNotFoundExceptionが起こることがわかります。
|