1

ファイルから各行を読み取り、それをArraylistに追加するJavaコードを書き込もうとしていました。これが私のコードです:

// try catch block removed for clarity.
file = new TextFileIn("names.txt");
String line = null;
while ((line = file.readLine()) != null) {
    list.add(line);
}

names.txt私のコードと同じパッケージフォルダにありました。私が使用したIDEはEclipseでした。ただし、コードを実行すると、が表示されますFileNotFoundExceptionTextFileInクラスはhttp://www.javaranch.com/doc/com/javaranch/common/TextFileIn.htmlから取得されます

どうすればファイルを見つけることができますか?

4

3 に答える 3

2

ファイルにアクセスするときは、現在の作業ディレクトリに依存しています。作業ディレクトリは、アプリケーションの起動方法によって異なります。Eclipseでは、通常、プロジェクトのルートフォルダです。コマンドラインでは、現在開いているディレクトリです。これをJavaコード内から制御することはできないため、これは、アプリケーション自体の一部であると想定されるファイルには不適切な方法と見なされます。

ファイルは明らかに実行中のコードと同じパッケージに含まれているため、すでにクラスパスに含まれているので、クラスパスから直接取得できます(そして取得する必要があります)。

InputStream input = getClass().getResourceAsStream("names.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(input, "UTF-8"));
String line = null;

while ((line = reader.readLine()) != null) {
    // ...
}

これをコンテキストで呼び出す場合は、このコードが含まれているクラスの名前をwhereにstatic置き換えます。getClass()YourClassName.classYourClassName

参照:

于 2011-04-10T14:18:31.327 に答える
1

パッケージフォルダにあります。
「names.txt」はプロジェクトルートを参照しています。したがって、「src / your.package/names.txt」のようなソースフォルダを検索する必要があります。

于 2011-04-10T14:13:59.200 に答える
0

コマンドラインからプログラムをコンパイルして実行する方法と、後でIDEの設定を変更する方法を学び、同じことを行う必要があります。基本的な知識は、IDEからIDEまで、EclipseからNetBeansまで、IntelliJまで持ち運ぶことができるものです。

デスクトップから、またはIDEをクリックして実行している場合でも、実質的にOSのフォルダーに座っています。eclipseでは、コードの実行時にデフォルトでclasses-dirになりますが、run asタブの1つで変更でき、クラスのどこに行っても$ {PROJECT}/binまたは${PROJECT}/classesになります。したがって、ファイルをそこに配置する必要がありますが、注意してください。「すべてクリーン」などを押すとファイルが削除される可能性があるため、コピーを使用してください。

面白いTextFileInの代わりに、java.util.Scannerを使用してみませんか?

Scanner scanner = new Scanner ("names.txt");
while (scanner.hasNextLine ())
    String line = scanner.nextLine ();
于 2011-04-10T14:25:52.093 に答える