JavaマスターJavaプログラムサンプル集例外のサンプル → FileNotFoundException対策

FileNotFoundException対策

どんな場合に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が起こることがわかります。