プログラムを起動するときにテキストファイルを読む必要があります。 Eclipseを使用して、新しいJavaプロジェクトを開始しました。私のプロジェクトフォルダーには、「src」フォルダーと標準の「JREシステムライブラリ」+ staedteliste.txtがあります。テキストファイルを配置する場所がわかりません。文字通り、思いつくすべてのフォルダーを試しました。..テキストファイルをアプリに含める必要があるため、「ハードコード」パスを使用できません。
次のコードを使用してファイルを読み取りますが、このエラーが発生します。
Error:Java.io.FileNotFoundException:staedteliste.txt(No such file or directory)
public class Test {
ArrayList<String[]> values;
public static void main(String[] args) {
// TODO Auto-generated method stub
URL url = Test.class.getClassLoader().getResource("src/mjb/staedteliste.txt");
System.out.println(url.getPath()); // I get a nullpointerexception here!
loadList();
}
public static void loadList() {
BufferedReader reader;
String zeile = null;
try {
reader = new BufferedReader(new FileReader("src/mjb/staedteliste.txt"));
zeile = reader.readLine();
ArrayList<String[]> values = new ArrayList<String[]>();
while (zeile != null) {
values.add(zeile.split(";"));
zeile = reader.readLine();
}
System.out.println(values.size());
System.out.println(zeile);
} catch (IOException e) {
System.err.println("Error :"+e);
}
}
}
最初に自問してください:ファイルはアプリケーションのinternalコンポーネントですか? (通常、JAR内にパックされていることを意味します。Webアプリの場合はWAR。通常、読み取り専用の構成ファイルまたは静的リソースです。).
答えが「はい」の場合、ファイルに絶対パスを指定する必要はありません。ただし、Javaはパスが「現在のディレクトリ」に対して相対的であると想定しているため、相対パスを使用してアクセスすることはできません。通常、このシナリオの推奨される方法は、それを相対的にクラスパスから読み込むことです。
Javaは、これを行うためのclassLoader.getResource()メソッドを提供します。また、Eclipse(通常のセットアップ)は_src/
_がクラスパスのルートにあると想定しているため、コンパイル後にすべてを出力ディレクトリ(_bin/
_)、Javaコンパイル済み形式のファイル(_.class
_)、残りはそのまま。
そのため、たとえば、ファイルを_src/Files/myfile.txt
_に配置すると、コンパイル時に_bin/Files/myfile.txt
_にコピーされます。そして、実行時に、_bin/
_はクラスパス(のルート)にあります。そのため、getResource("/Files/myfile.txt")
を呼び出すことで(そのバリアントのいくつかで)読むことができます。
Edited:さらに、ファイルが概念的にJavaクラスに関連付けられている場合(たとえば、一部の_com.example.MyClass
_には_MyClass.cfg
_関連の構成がありますファイル)、 クラスのgetResource()メソッド を使用し、(リソース)相対パスを使用できます:MyClass.getResource("MyClass.cfg")
。ファイルはクラスパスで検索されますが、クラスパッケージが事前に追加されています。そのため、このシナリオでは、通常、_MyClass.cfg
_ファイルと_MyClass.Java
_ファイルを同じディレクトリに配置します。
取るべき1つの道は
リソースローダーを使用してファイルを見つけます。
URL url = Test.class.getClassLoader().getResource("myfile.txt");
System.out.println(url.getPath());
...
Files
の下にsrc
フォルダーを作成し、そこにファイルを配置するだけです。これはsrc/Files/myFile.txt
のようになります
注:コードでは、次のように指定する必要がありますFiles/myFile.txt
例:.
getResource("Files/myFile.txt");
したがって、プロジェクトをビルドして.jarファイルを実行すると、これが機能するはずです。
Eclipseに「TestProject」というプロジェクトがあり、ワークスペースフォルダーがE:/ Eclipse/workspaceにあるとします。 Eclipseプロジェクトをビルドすると、クラスパスはe:/Eclipse/workspace/TestProject
になります。 「staedteliste.txt」を読み込もうとすると、e:/Eclipse/workspace/TestProject/staedteliste.txt
にあるファイルにアクセスしようとしています。
プロジェクト用に別のフォルダーを作成する場合は、TestProjectの下にFilesフォルダーを作成し、(相対パス)/Files/staedteliste.txt
を使用してファイルにアクセスします。ファイルをsrcフォルダーの下に配置する場合、/src/staedteliste.txt
を使用してアクセスする必要があります。 srcフォルダー内のFilesフォルダーは/src/Files/staedteliste.txt
になります
相対パスを使用する代わりに、最初にe:/Eclipse/workspace/
を追加することで絶対パスを使用できますが、プロジェクトフォルダー構造が同じ。
MJB
これを試してください
Eclipseで使用したいテキストファイルを「右クリック」し、HDDに保存されている完全なパスを確認してコピーします(UNIXの場合は/home/sjaisawal/Space-11.4-template/provisioning/devenv/Test/src/testpath/ testfile.txt ")
この完全なパスを入力して試してください。
それが機能する場合、クラスパスの問題else GOK :)
これが単純なプロジェクトの場合は、txtファイルをプロジェクトフォルダーに直接ドラッグできるはずです。具体的には、「プロジェクトフォルダー」が最上位のフォルダーになります。 txtファイルをsrcフォルダーに置くことで(私がやっている宿題プロジェクトのために)これを試みましたが、うまくいきませんでした。しかし、最終的にプロジェクトファイルに配置することがわかりました。
このための良いチュートリアルは http://www.vogella.com/articles/JavaIO/article.html です。これをI/Oのイントロとして使用しました。
Javaクラスパッケージ名に応じて、おそらくディレクトリ構造の4レベルまたは5レベル下になります。
Javaクラスパッケージがcom.stackoverflow.projectなどの場合、クラスはsrc/com/stackoverflow/projectにあります。
複数の../
を使用してディレクトリ構造を上に移動するか、クラスと同じパッケージにテキストファイルを移動できます。テキストファイルを移動する方が簡単です。
おそらく、ClassLoaderクラスのgetResourceのさまざまなフレーバーを確認する必要があります。 http://Java.Sun.com/j2se/1.4.2/docs/api/Java/lang/ClassLoader.html =
これを見てください ビデオ
あなたがしなければならないことは、ファイルを選択し(txtファイルと同じ単純な形式であると仮定)、それをEclipseのプロジェクトにドラッグして、そこにドロップすることです。より柔軟なため、リンクではなくコピーを選択します。それだけです-私はちょうどそれを試しました。