java为什么我的库不能访问它的资源?
我有一个读取文件的类:
package classlibrary;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
public class ReadingResource {
public static String readResource() throws IOException {
URL resource = ClassLoader.getSystemClassLoader().getResource("classlibrary/test_file.txt");
BufferedReader br = new BufferedReader(new FileReader(resource.getPath()));
return br.readLine();
}
}
资源文件位于该类所在的同一目录中。 我用这个类和这个文件建立了一个库
现在我想在另一个类中使用它:
package uritesting;
import classlibrary.ReadingResource;
import java.io.IOException;
public class URITesting {
public static void main(String[] args) throws IOException {
System.out.println(ReadingResource.readResource());
}
}
当我做出决定的时候。jar文件出了这个类,设置该类为主类,添加。我得到一个FileNotFoundException,表示类ReadingResource
找不到指定的文件。这很有趣,因为在异常消息中指定的路径实际上是文件的正确路径
您可以找到文件here
编辑:
我用NetBeans开发了这个项目。当我在那里运行时,它运行良好。在这种情况下,类路径是不同的。它同时包含URITestingProject
和ReadingResource
的资源
但是,当我将其作为独立JAR运行时,类路径只包含URITestingProject
。对我来说奇怪的是,它没有抱怨没有找到类ReadingResource
。这意味着它已加载,尽管它不在类路径中:/
# 1 楼答案
问题是
resource.getPath()
。不可能在jar文件内、在另一台服务器上计算对文件读取器有效的路径等等。但是,您可以通过流获取数据:作为旁注:使用reader阅读时,最好指定编码: