如何从资源文件夹加载文件?

新手上路,请多包涵

我的项目具有以下结构:

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

我在 /src/test/resources/test.csv 中有一个文件,我想从 /src/test/java/MyTest.java 的单元测试中加载文件

我有这段代码不起作用。它抱怨“没有这样的文件或目录”。

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

我也试过这个

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

这也行不通。它返回 null 。我正在使用 Maven 来构建我的项目。

原文由 codereviewanskquestions 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 633
2 个回答

尝试下一个:

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


如果上述方法不起作用,则各种项目已添加以下类: ClassLoaderUtil 1 (代码 here )。 2

以下是如何使用该类的一些示例:

 src\main\java\com\company\test\YourCallingClass.java
src\main\java\com\opensymphony\xwork2\util\ClassLoaderUtil.java
src\main\resources\test.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. The Wayback Machine看到它
  2. 也在 GitHub 中。

原文由 Paul Vargas 发布,翻译遵循 CC BY-SA 4.0 许可协议

尝试:

 InputStream is = MyTest.class.getResourceAsStream("/test.csv");

IIRC getResourceAsStream() 默认情况下是相对于类的包。

正如@Terran 指出的那样,不要忘记在文件名的开头添加 /

原文由 vanza 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题