1. ホーム

[解決済み】リソースフォルダからファイルを読み込むには?

2022-03-27 04:20:45

質問

私のプロジェクトは以下のような構造になっています。

/src/main/java/
/src/main/resources/
/src/test/java/
/src/test/resources/

にあるファイルを /src/test/resources/test.csv にあるユニットテストからファイルをロードしたい。 /src/test/java/MyTest.java

私はこのコードを持っていますが、うまくいきませんでした。これは、"No such file or directory"を訴えます。

BufferedReader br = new BufferedReader (new FileReader(test.csv))

こんなこともやってみました

InputStream is = (InputStream) MyTest.class.getResourcesAsStream(test.csv))

これもうまくいきません。これは null . 私は私のプロジェクトを構築するためにMavenを使用しています。

どのように解決するのですか?

次をお試しください。

ClassLoader classloader = Thread.currentThread().getContextClassLoader();
InputStream is = classloader.getResourceAsStream("test.csv");


上記でうまくいかない場合、様々なプロジェクトで以下のようなクラスが追加されています。 ClassLoaderUtil 1 (コード ここで ). 2

そのクラスがどのように使われているのか、いくつか例を挙げてみましょう。

<サブ

srcmainjavacomcompanytestYourCallingClass.java
srcmainjava.com ■■ClassLoaderUtil.java
srcmainesources.csv

// java.net.URL
URL url = ClassLoaderUtil.getResource("test.csv", YourCallingClass.class);
Path path = Paths.get(url.toURI());
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);

// java.io.InputStream
InputStream inputStream = ClassLoaderUtil.getResourceAsStream("test.csv", YourCallingClass.class);
InputStreamReader streamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
BufferedReader reader = new BufferedReader(streamReader);
for (String line; (line = reader.readLine()) != null;) {
    // Process line
}


備考

  1. 見る ウェイバックマシン .
  2. にもあります。 GitHub .