我只是想使用this.class.getResourceAsStream(filename)在一个简单的.txt文件中读入我的java项目。我在main / resources中有几个文件,当我尝试将它们作为输入流时,几乎所有文件都返回一个对象。我无法读到的唯一对象是我的文本文件。
我已经将文件放在了类加载器可读的所有其他资源文件中,但看起来这个文件由于某种原因没有放在类的classLoader中。如果我解压缩jar,该文件仍然包含在与所有其他资源相同的目录中,因此它似乎正在构建正确。
我想我要问的是,我在什么时候告诉Java我希望将哪些文件作为资源包含在类ClassLoader中?如果事情在正确的地方(即主要/资源),那么在建造罐子时应该做些什么呢?
这是代码的样子,它是各自的返回值,当运行它可以找到的文件和它不能的文件时,它们都位于同一个地方。
// This is not found. Both are placed at src/main/resources
def tmpDict = this.class.getResourceAsStream("dict.txt")
println tmpDict // null
// This is found
def tmpDict2 = this.class.getResourceAsStream("calc.config")
println tmpDict2 // sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream@2dae5a79
答案 0 :(得分:0)
如果没有更多信息,我会说道路错了。当我只使用“file.txt”获取NPE的路径时
我used this method从流中读取。该文件位于\src\main\resources\static\file.txt
这在eclipse中工作,打包到jar中并在那里工作。
public String getFile() throws Exception {
InputStream in = Controller.class.getClassLoader().getResourceAsStream("static/file.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(in, Charset.defaultCharset()));
StringBuilder out = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
out.append(line);
}
return out.toString();
}
答案 1 :(得分:0)
一些非常基本的检查:
文件必须区分大小写(因为它不是Windows文件),文件名的特殊字符可能很麻烦。还要检查项目中的文件是否有两次文件扩展名(.txt.txt - Windows隐藏扩展名)。
检查getResourceAsStream("/a/b/c/A.txt")
是否确实为空。
如果不是,则编码可能会出错。