1. ホーム
  2. java

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

2022-03-08 10:28:53

質問

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

この問題を解決するための方法を教えてください。ありがとうございます。

解決方法を教えてください。

すでにクラスパスにある場合は、ディスクのファイルシステムからではなく、クラスパスから取得すればよい。で相対パスをいじってはいけません。 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");

を作成するよりも確実に好ましいです。 new File() なぜなら url は必ずしもディスクファイルシステムのパスを表しているわけではなく、 仮想ファイルシステムのパス (JAR がディスクファイルシステムの temp フォルダではなくメモリに展開されたときに発生します) やネットワークパスも表す可能性があります。 File コンストラクタを使用します。

パッケージ名が示唆するように、そのファイルが 実際に は、完全な プロパティファイル (を含む key=value の行に、拡張子 "wrong" を追加するだけです。 InputStream をすぐに load() メソッドを使用します。

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

注:内部からアクセスしようとする場合 static コンテキストを使用します。 FileLoader.class (または、どんな YourClass.class の代わりに getClass() のような、"left "と "left "が混在しているような場合。