web-dev-qa-db-ja.com

Eclipseで使用したいテキストファイルをどこに配置しますか?

プログラムを起動するときにテキストファイルを読む必要があります。 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);
    }
}

}

25
MJB

最初に自問してください:ファイルはアプリケーションの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_ファイルを同じディレクトリに配置します。

44
leonbloy

取るべき1つの道は

  1. 作業しているファイルをクラスパスに追加します
  2. リソースローダーを使用してファイルを見つけます。

        URL url = Test.class.getClassLoader().getResource("myfile.txt");
        System.out.println(url.getPath());
        ...
    
  3. それを開く
9
Greg Adamski

Filesの下にsrcフォルダーを作成し、そこにファイルを配置するだけです。これはsrc/Files/myFile.txtのようになります

注:コードでは、次のように指定する必要がありますFiles/myFile.txt例:.

getResource("Files/myFile.txt");

したがって、プロジェクトをビルドして.jarファイルを実行すると、これが機能するはずです。

3
Bernard Banta

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/を追加することで絶対パスを使用できますが、プロジェクトフォルダー構造が同じ。

2
mr popo

MJB

これを試してください

  1. Eclipseで使用したいテキストファイルを「右クリック」し、HDDに保存されている完全なパスを確認してコピーします(UNIXの場合は/home/sjaisawal/Space-11.4-template/provisioning/devenv/Test/src/testpath/ testfile.txt ")

  2. この完全なパスを入力して試してください。

  3. それが機能する場合、クラスパスの問題else GOK :)

0
sandejai

これが単純なプロジェクトの場合は、txtファイルをプロジェクトフォルダーに直接ドラッグできるはずです。具体的には、「プロジェクトフォルダー」が最上位のフォルダーになります。 txtファイルをsrcフォルダーに置くことで(私がやっている宿題プロジェクトのために)これを試みましたが、うまくいきませんでした。しかし、最終的にプロジェクトファイルに配置することがわかりました。

このための良いチュートリアルは http://www.vogella.com/articles/JavaIO/article.html です。これをI/Oのイントロとして使用しました。

0
Mark

Javaクラスパッケージ名に応じて、おそらくディレクトリ構造の4レベルまたは5レベル下になります。

Javaクラスパッケージがcom.stackoverflow.projectなどの場合、クラスはsrc/com/stackoverflow/projectにあります。

複数の../を使用してディレクトリ構造を上に移動するか、クラスと同じパッケージにテキストファイルを移動できます。テキストファイルを移動する方が簡単です。

0

おそらく、ClassLoaderクラスのgetResourceのさまざまなフレーバーを確認する必要があります。 http://Java.Sun.com/j2se/1.4.2/docs/api/Java/lang/ClassLoader.html =

0
pdbartlett

これを見てください ビデオ

あなたがしなければならないことは、ファイルを選択し(txtファイルと同じ単純な形式であると仮定)、それをEclipseのプロジェクトにドラッグして、そこにドロップすることです。より柔軟なため、リンクではなくコピーを選択します。それだけです-私はちょうどそれを試しました。

0
Nenad Bulatovic