2つのパッケージを含むプロジェクトがあります。
tkorg.idrs.core.searchengines
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
あなたはそれを修正するための解決策を与えることができますか?ありがとう。
すでにクラスパスにある場合は、クラスパスから取得するだけです。 Java.io.File
には相対パスをいじらないでください。それらは現在の作業ディレクトリに依存しており、その上ではJavaコード内から完全に制御することはできません。
ListStopWords.txt
がFileLoader
クラスと同じパッケージ内にあると仮定します。
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
を使用してください。
ファイルの相対パスを指定したい場合は、次の行を使用できます。
File file = new File("./properties/files/ListStopWords.txt");
相対パスは、を使用してJavaで機能します。オペレーター。
それで問題はJavaが現在見ている道をどのように知っていますか?
小さな実験をする
File directory = new File("./");
System.out.println(directory.getAbsolutePath());
出力を確認すると、Javaが探している現在のディレクトリがわかるようになります。そこから、単純に./演算子を使ってファイルを探します。
例えば、出力が
G:\ Java8Ws\MyProject\content.
そして、あなたのファイルはMyProjectが単に使うフォルダの中にあります。
File resourceFile = new File("../myFile.txt");
お役に立てれば
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();
}
.\properties\files\ListStopWords.txt
を試してください
BalusCによって提供された答えはこのケースのために働きますが、URLの中で、これらが有効なファイル名ではない%20に変換されているのでファイルパスがスペースを含むときそれは壊れます。 StringではなくURIを使用してFileオブジェクトを構築すると、空白文字は正しく処理されます。
URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.toURI());
私はコメントしたかもしれませんが、私はそのためのより少ない担当者を持っています。 Samratの答えが私のために仕事をしました。次のコードで現在のディレクトリパスを確認することをお勧めします。
File directory = new File("./");
System.out.println(directory.getAbsolutePath());
私は自分のプロジェクトで直面していた問題を修正するためにそれを単に使用しました。現在のディレクトリの親ディレクトリに戻るには、必ず./を使用してください。
./test/conf/appProperties/keystore
Src/main // js/Simulator.Javaの中の 'command.json'を解析したいと思いました。そのために私はsrcフォルダにjsonファイルをコピーして、このような絶対パスを与えました:
Object obj = parser.parse(new FileReader("./src/command.json"));