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

时间:2018-04-23 01:10:24

标签: java data-structures java-8 java-stream

我的包装如下

src->main->java->com->Sample.java
src->main->resources->orders.csv

src->test->java->com->SampleTest.java
src->test->resources->orders.csv 

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

String file1 = "orders.csv";
Stream<String> lines1 = Files.lines(Paths.get(file1)); // Line 1

但我不认为第1行和第2行的代码有效。它找不到该文件。我设置file1和file2是否正确?

1 个答案:

答案 0 :(得分:0)

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

您的Sample.java将如下所示:

String file1 = "/main/resources/orders.csv";
Stream<String> lines1 = Files.lines(Paths.get(Sample.class.getResource(file1).toURI()));

您的SampleTest.java将如下所示:

String file1 = "/test/resources/orders.csv";
Stream<String> lines1 = Files.lines(Paths.get(Sample.class.getResource(file1).toURI()));

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

  

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

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