从JAR文件访问源文件

时间:2013-01-29 06:20:54

标签: java file-io jar

我有一个关于从JAR文件访问资源的小问题。我使用Netbeans IDE命名处理器创建了一个java类库。它有一个名为proc的包,它又包含名为toRead.txt的文本文件。现在我有另一个java应用程序,其类似于Main.java,它使用处理器库。

要获得文本文件的InputStream,我使用了以下代码

ClassLoader cl = ClassLoader.getSystemClassLoader();
InputStream is = cl.getResourceAsStream("proc/toRead.txt"); 
在Main.java中

现在我想以相反的方式做到这一点。我想在处理器库中获得InputStreamMain.java。我尝试了上面显示的相同代码,但它不起作用。

我们如何在此库中获取源本身的InputStream

3 个答案:

答案 0 :(得分:0)

我的猜测是,当您运行应用程序或将其捆绑在JAR中时,Main.java文件不再存在。这必须是因为大多数IDE在与源代码文件夹分开的文件夹中编译类。请注意,Java编译器会保留其他资源,包括TXT和GIF文件,这就是程序允许您在运行时读取文本文件的原因。

正如@TechExcahnge所提到的,如果你真的需要阅读Main.java文件,你需要在JAR中手动打包它,这可以用任何支持ZIP的程序来完成格式。

答案 1 :(得分:0)

SystemClassLoader不会加载您自己的班级,application classloaderuser 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;
}