5

netbeansの「/build/ classes」ディレクトリに.txtファイル(「file.txt」)があります。

同じディレクトリに、次のコード用にコンパイルされた.classファイルがあります。

try {
File f = new File("file.txt");
Scanner sc = new Scanner(f);
}
catch (IOException e) {
   System.out.println(e);
}

コード(「Scannersc ..」のブレークポイント)をデバッグすると、例外が起動され、次のように出力されます。

java.io.FileNotFoundException:file.txt(システムは指定されたファイルを見つけることができません)

「/file.txt」と「//file.txt」も使ってみましたが、同じ結果になりました。

ヒントを事前にありがとう

4

5 に答える 5

7

そのパスを使用する場合new File("pathtofile")は、現在の作業ディレクトリからの相対パスであり、必ずしもクラスファイルが存在する場所ではありません。

ファイルがクラスパスのどこかにあることが確実な場合は、代わりに次のパターンを使用できます。

URL path = ClassLoader.getSystemResource("file.txt");
if(path==null) {
     //The file was not found, insert error handling here
}
File f = new File(path.toURI());
于 2012-05-31T09:10:52.747 に答える
2

JVMは、現在の作業ディレクトリでファイルを探します。

これがどこにあるかは、IDE設定(プログラムの実行方法)によって異なります。

それがどこにあると予想file.txtされるかを理解するために、あなたはすることができます

System.out.println(new File("."));

たとえば出力する場合

/some/path/project/build

ビルドディレクトリに配置する必要がfile.txtあります(またはビルドディレクトリからの適切なパスを指定します)。

于 2012-05-31T09:07:26.237 に答える
1

試す:

File f = new File("./build/classes/file.txt");
于 2012-05-31T09:05:42.253 に答える
0
Use "." to denote the current directory

String path = "./build/classes/file.txt";

File f = new File(path);
于 2012-05-31T09:47:39.383 に答える
0

ファイルオブジェクトがロードされ、現在のディレクトリで一致するものが検索されます。これは、ソースではなくクラスファイルがロードされるプロジェクトフォルダに直接あります。ファイルをプロジェクトフォルダに直接配置します。

于 2020-07-20T06:10:53.213 に答える