26

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

}

4

9 に答える 9

45

最初に自問してください:あなたのファイルはあなたのアプリケーションの内部コンポーネントですか?(これは通常、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")(そのバリアントのいくつかで)呼び出すことにより、それを読むことができます。

編集済み:さらに、ファイルが概念的にJavaクラスに関連付けられている場合(たとえば、一部に構成ファイルが関連付けられcom.example.MyClassている場合) 、クラスからgetResource()メソッドを使用し、(リソース)相対パスを使用できます。次に、ファイルはクラスパスで検索されますが、クラスパッケージが事前に追加されています。そのため、このシナリオでは、通常、ファイルとファイルを同じディレクトリに配置します。MyClass.cfgMyClass.getResource("MyClass.cfg")MyClass.cfgMyClass.java

于 2010-05-17T16:57:46.640 に答える
9

とるべき1つの道は

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

        URL url = Test.class.getClassLoader().getResource("myfile.txt");
        System.out.println(url.getPath());
        ...
    
  3. それを開く
于 2010-05-17T16:12:14.907 に答える
3

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/、最初に追加することで絶対パスを使用できますが、プロジェクトフォルダー構造が同じである限り、リファクタリングを気にせずにプロジェクトを移動できるため、相対パスを使用する方が適切です。

于 2010-05-17T17:31:00.857 に答える
3

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

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

getResource("Files/myFile.txt");

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

于 2012-01-20T08:05:55.170 に答える
0

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

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

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

于 2010-05-17T16:10:46.197 に答える
0

おそらく、ClassLoaderクラスのgetResourceのさまざまなフレーバーを確認する必要があります:https ://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ClassLoader.html 。

于 2010-05-17T16:14:05.050 に答える
0

MJB

これを試してみてください

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

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

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

于 2012-01-19T10:06:26.220 に答える
0

これが単純なプロジェクトの場合は、txtファイルをプロジェクトフォルダーに直接ドラッグできるはずです。具体的には、「プロジェクトフォルダ」が最上位のフォルダになります。txtファイルをsrcフォルダーに入れて(私が行っている宿題プロジェクトの場合)これを実行しようとしましたが、機能しませんでした。しかし、ついに私はそれをプロジェクトファイルに入れることにしました。

このための良いチュートリアルはhttp://www.vogella.com/articles/JavaIO/article.htmlです。私はこれをi/oのイントロとして使用し、役に立ちました。

于 2013-01-27T18:52:13.893 に答える
0

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

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

于 2013-06-21T18:48:33.733 に答える