0

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

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

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

在 Main.java 中。

现在我想反过来做。我想在处理器库中获得一个InputStreamto 。Main.java我尝试了上面显示的相同代码,但它不起作用。

我们如何InputStream在这个库中获取 Source 本身?

4

3 回答 3

0

SystemClassLoader不会加载你自己的课程,application classloader或者user classloader我会加载你自己的课程。

试试这个代码:

 public class TestRead{
    public static void main(String [] args){
        InputStream is = TestRead.class.getResourceAsStream("proc/toRead.txt");
    }
 }
于 2013-01-29T06:53:52.767 回答
0

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

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

于 2013-01-29T06:53:25.100 回答
0

确保包含资源的 jar 文件位于 ClassPath 中。

尝试这个:

public InputStream getResourceUnderJarAsStream(){
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
return inputStream;
}
于 2013-01-29T07:03:40.273 回答