4

Snow LeopardのEclipse(Indigo)で次のJava 6コードを実行すると、FileNotFoundExceptionが発生します。

import java.io.*;
import java.util.*;

public class readFile {

    public static void main(String[] args) {

        Scanner s = new Scanner(new FileReader("/Users/daniel/pr/java/readFile/myfile.txt"));  // Line 9

    }
}

例外は

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Unhandled exception type FileNotFoundException

    at readFile.main(readFile.java:9)

私の現在のワークスペースは/Users/ daniel / pr/javaです。これには1つのプロジェクト(readFile)のみが含まれ、ファイル階層は次のようになります。

- readFile
    - src
        - (default package)
            - readFile.java
    - JRE System Library [JavaSE-1.6]
    - myfile.txt

いくつかの非常によく似た質問を読んだ後、私は試しました

  • myfile.txtのコピーを、プロジェクト、bin、src、ワークスペースのディレクトリ、およびホームフォルダとルートフォルダに配置します
  • 作業ディレクトリを識別し、相対パスを使用する
  • Eclipseの「実行構成>引数>作業ディレクトリ」を使用してワークスペースを手動で設定する
  • bin、readFile、src、およびjavaディレクトリにコマンドラインJavaランチャーを使用してプログラムを実行する(これらすべての場所にmyfile.txtのコピーを含む)
  • ファイル拡張子を削除するか、ファイル名を長くする(想定される最小文字数を超える)、および
  • myfile.txtのアクセス許可を確認します(現在はrw-r--r--になっています)。

私は途方に暮れています。何が問題なのですか?(読んでくれてありがとう!)

4

3 に答える 3

5

例外はあなたに問題を告げます。

メインにあるコードはFileNotFoundExceptionをスローする可能性があるため、メソッドシグネチャでその例外をスローできることを宣言するか、コードをtry catchで囲むことにより、コードでそれを考慮する必要があります。

宣言:

public static void main(String[] args) throws FileNotFoundException{

    Scanner s = new Scanner(new FileReader("/Users/daniel/pr/java/readFile/myfile.txt"));  // Line 9

}

またはtry/catchを使用する

public static void main(String[] args) {
    try { 
        Scanner s = new Scanner(new FileReader("/Users/daniel/pr/java/readFile/myfile.txt"));  // Line 9
    } catch (FileNotFoundException e) {
        //do something with e, or handle this case
    }
}

これら2つのアプローチの違いは、これがメインであるため、メソッドシグネチャで宣言すると、プログラムが例外をスローして停止し、スタックトレースを提供することです。

try / catchを使用すると、エラーをログに記録したり、再試行したりすることで、この状況に対処できます。

http://docs.oracle.com/javase/tutorial/essential/exceptions/を参照して、Javaでの例外処理について学習することをお勧めし ます。これは、非常に役立ちます。

于 2012-05-04T16:52:42.280 に答える
4

FileNotFoundExceptionはチェックされた例外です!例外をキャッチする必要があります...

 public static void main(String[] args) {
     try {
        Scanner s = new Scanner(new FileReader("/Users/daniel/pr/java/readFile/myfile.txt"));  // Line 9
     } catch(FileNotFoundException ex) {
         //Handle exception code ...
     }
 }
于 2012-05-04T16:51:06.200 に答える
2
"/Users/daniel/pr/java/readFile/myfile.txt"

それはすべきではありません:

"/users/daniel/pr/java/readFile/myfile.txt"
于 2012-05-04T16:52:42.750 に答える