web-dev-qa-db-ja.com

Javaプロジェクトの相対パスからファイルを読み込む方法? Java.io.Fileは指定されたパスを見つけることができません

2つのパッケージを含むプロジェクトがあります。

  1. tkorg.idrs.core.searchengines
  2. tkorg.idrs.core.searchengines

パッケージ(2)にはテキストファイルListStopWords.txtがあり、パッケージ(1)にはクラスFileLoadderがあります。これがFileLoaderのコードです。

File file = new File("properties\\files\\ListStopWords.txt");

しかし、このエラーがあります:

The system cannot find the path specified

あなたはそれを修正するための解決策を与えることができますか?ありがとう。

101
tiendv

すでにクラスパスにある場合は、クラスパスから取得するだけです。 Java.io.Fileには相対パスをいじらないでください。それらは現在の作業ディレクトリに依存しており、その上ではJavaコード内から完全に制御することはできません。

ListStopWords.txtFileLoaderクラスと同じパッケージ内にあると仮定します。

URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.getPath());

あるいは、あとのすべてがそれのInputStreamであるならば、

InputStream input = getClass().getResourceAsStream("ListStopWords.txt");

ファイルが - パッケージ名のヒントとして - 実際には完全な プロパティファイルkey=value行を含む)だけで"間違った"拡張子、そしてあなたは load() メソッドにすぐにそれを供給することができます。

Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("ListStopWords.txt"));

注:staticコンテキスト内からアクセスしようとしている場合は、上記の例のgetClass()ではなくFileLoader.classを使用してください。

146
BalusC

ファイルの相対パスを指定したい場合は、次の行を使用できます。

File file = new File("./properties/files/ListStopWords.txt");  
39
santhosh

相対パスは、を使用してJavaで機能します。オペレーター。

  • 。現在実行中のコンテキストと同じフォルダを意味します。
  • ..は現在実行中のコンテキストの親フォルダを意味します。

それで問題はJavaが現在見ている道をどのように知っていますか?

小さな実験をする

   File directory = new File("./");
   System.out.println(directory.getAbsolutePath());

出力を確認すると、Javaが探している現在のディレクトリがわかるようになります。そこから、単純に./演算子を使ってファイルを探します。

例えば、出力が

G:\ Java8Ws\MyProject\content.

そして、あなたのファイルはMyProjectが単に使うフォルダの中にあります。

File resourceFile = new File("../myFile.txt");

お役に立てれば

23
Samrat
InputStream in = FileLoader.class.getResourceAsStream("<relative path from this class to the file to be read>");
try {
    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    String line = null;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
} catch (Exception e) {
    e.printStackTrace();
}
7

.\properties\files\ListStopWords.txtを試してください

6
bUg.

BalusCによって提供された答えはこのケースのために働きますが、URLの中で、これらが有効なファイル名ではない%20に変換されているのでファイルパスがスペースを含むときそれは壊れます。 StringではなくURIを使用してFileオブジェクトを構築すると、空白文字は正しく処理されます。

URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.toURI());
4
Mark Krijgsman

私はコメントしたかもしれませんが、私はそのためのより少ない担当者を持っています。 Samratの答えが私のために仕事をしました。次のコードで現在のディレクトリパスを確認することをお勧めします。

    File directory = new File("./");
    System.out.println(directory.getAbsolutePath());

私は自分のプロジェクトで直面していた問題を修正するためにそれを単に使用しました。現在のディレクトリの親ディレクトリに戻るには、必ず./を使用してください。

    ./test/conf/appProperties/keystore 
2
Aditya Bhardwaj

Src/main // js/Simulator.Javaの中の 'command.json'を解析したいと思いました。そのために私はsrcフォルダにjsonファイルをコピーして、このような絶対パスを与えました:

Object obj  = parser.parse(new FileReader("./src/command.json"));
0
sver