无法从Linux上的资源加载文本文件

时间:2014-02-19 21:23:53

标签: java linux

我正在尝试读取我在资源文件夹中进行测试的文本文件。我已尝试过至少3种不同的实现在Windows上正常工作,但它们都在Linux上失败。

当前项目看起来像

/src/test/java
  /com/my/app/util/Class_needs_text.java
/src/test/resources
  /com/my/app/util/text_file.txt

Class_needs_text.java

...
private static final String LOADTHIS = "/com/my/app/util/text_file.txt"; 
private static final String LOADTHAT = "text_file.txt"; 
// both of these work on windows, but not linux
java.net.URL url = Class_needs_text.class.getResource(LOADTHIS);
java.nio.file.Path resPath = java.nio.file.Paths.get(url.toURI());
fileContents = new String(java.nio.file.Files.readAllBytes(resPath), "UTF8");

我已经检查了linux,并且正在将文本文件复制到构建时的类文件夹目录中。 (./src/test/resources/com/my/app/util/text_file.txt to ./target/test-classes/com/my/app/util/text_file.txt)

很抱歉,如果这太冗长了。 Cliffs:我需要在windows和linux中读取位于文本文件的资源文件夹的内容。

1 个答案:

答案 0 :(得分:0)

当在类上调用getResource()时,该类会将该调用委托给它的类加载器,我不确定unix和windows JVM之间是否存在差异。不应该在OS上有所不同,因为加载类的类加载器应该对资源具有相同的可见性。

如果您尝试在静态方法中加载资源,可以尝试使用类加载器。

Class_needs_text.class.getClassLoader().getResource(LOADTHIS);

如果您使用的是非静态方法

this.getClass().getResource(LOADTHIS);