我有一个关于从JAR文件访问资源的小问题。我使用Netbeans IDE命名处理器创建了一个java类库。它有一个名为proc
的包,它又包含名为toRead.txt
的文本文件。现在我有另一个java应用程序,其类似于Main.java
,它使用处理器库。
要获得文本文件的InputStream
,我使用了以下代码
ClassLoader cl = ClassLoader.getSystemClassLoader();
InputStream is = cl.getResourceAsStream("proc/toRead.txt");
在Main.java中。
现在我想以相反的方式做到这一点。我想在处理器库中获得InputStream
到Main.java
。我尝试了上面显示的相同代码,但它不起作用。
我们如何在此库中获取源本身的InputStream
?
答案 0 :(得分:0)
我的猜测是,当您运行应用程序或将其捆绑在JAR中时,Main.java文件不再存在。这必须是因为大多数IDE在与源代码文件夹分开的文件夹中编译类。请注意,Java编译器会保留其他资源,包括TXT和GIF文件,这就是程序允许您在运行时读取文本文件的原因。
正如@TechExcahnge所提到的,如果你真的需要阅读Main.java文件,你需要在JAR中手动打包它,这可以用任何支持ZIP的程序来完成格式。
答案 1 :(得分:0)
SystemClassLoader
不会加载您自己的班级,application classloader
或user classloader
mybe加载您自己的班级。
试试这段代码:
public class TestRead{
public static void main(String [] args){
InputStream is = TestRead.class.getResourceAsStream("proc/toRead.txt");
}
}
答案 2 :(得分:0)
确保包含资源的jar文件位于ClassPath中。
试试这个:
public InputStream getResourceUnderJarAsStream(){
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
return inputStream;
}