首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法从src/main/resources文件夹读取文件Java 8

无法从src/main/resources文件夹读取文件Java 8
EN

Stack Overflow用户
提问于 2018-04-23 09:10:24
回答 1查看 423关注 0票数 0

我的套餐如下

代码语言:javascript
运行
复制
src->main->java->com->Sample.java
src->main->resources->orders.csv

代码语言:javascript
运行
复制
src->test->java->com->SampleTest.java
src->test->resources->orders.csv 

在Sample.java和SampleTest.java中,我有以下代码

代码语言:javascript
运行
复制
String file1 = "orders.csv";
Stream<String> lines1 = Files.lines(Paths.get(file1)); // Line 1

但我认为第一行和第二行上的代码不起作用。它找不到该文件。我是否正确设置了file1和file2?

EN

回答 1

Stack Overflow用户

发布于 2018-04-23 10:11:45

因为这些是资源文件,所以您希望使用Class#getResource(String)来搜索相对于您的类的文件,并获得其绝对URL。

您的Sample.java将如下所示:

代码语言:javascript
运行
复制
String file1 = "/main/resources/orders.csv";
Stream<String> lines1 = Files.lines(Paths.get(Sample.class.getResource(file1).toURI()));

您的SampleTest.java将如下所示:

代码语言:javascript
运行
复制
String file1 = "/test/resources/orders.csv";
Stream<String> lines1 = Files.lines(Paths.get(Sample.class.getResource(file1).toURI()));

现在让我解释一下字符串"file1“的语法。如果您查看JavaDoc,您将看到它显示:

如果名称以'/‘('\u002f')开头,则资源的绝对名称是'/’后面的名称部分。

这基本上意味着,如果提供的路径以正斜杠开头,则将相对于源目录进行处理。换句话说,第一个正斜杠之后的所有内容都是源路径的“子路径”。如果没有正斜杠,JVM将在当前类加载器定义的包中搜索名为"main“的包。因此,"/main/resources/orders.csv"将被作为"src/main/resources/orders.csv"处理,而"/test/resources/orders.csv"将被作为"src/test/resources/orders.csv"处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49972181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档