访问打包在 jar 文件中的文件

3

我创建了一个可运行的编译类和一些模板文件(文本)的jar文件。现在,我想将打包到jar中的文本文件用作应用程序中的File对象进行分发。

我尝试使用相对路径,但并没有成功。如何获取指向存储在jar中的文本文件的File对象?

是否有一种方法可以在运行未打包的类文件和具有相同代码的jar时都能正常工作,或者我需要使用单独的函数?

2个回答

5

如果你想从jar包内部使用它,你可以像使用Class.getResourceAsStream(String)一样使用它,或者类似的方法。

如果是从外部访问,那么这个文件并不是一个普通的文件,而是在jar包中,所以你需要先将其提取出来才能正常使用。


那么这是关于文件的。没有办法获取指向目录的File对象,因此可以获取子文件,对吧? - Kissaki
在jar包内部,它实际上不是一个文件,而是一个资源。您可以告诉我您想要做什么,以便我可以为您提供更好的建议。 - jmj
我正在使用FreeMarker库作为模板引擎,将File类型的templates-dir作为模板的基础目录传递给它。在从IDE运行时,使用普通的File对象指向该目录可以正常工作。现在我想让它也能够从单个Jar文件中运行。我已经成功地将文件打包到了jar文件中。我应该将文件提取到临时目录中,还是有更好的方法? - Kissaki
如果你想从jar包外部访问文件,那么我不了解FreeMarker的方法,唯一的方式就是进行解压。否则,如果你要从其他包含文件的jar包或war包中访问文件,并且这些文件在类路径中,你可以使用上述的getResourceAsStream()方法。 - jmj

1
如果您正在应用程序中使用JAR,则{{link1:Class.getResourceAsStream(String)}}将起作用。
或者,如果您正在使用Servlet,则ServletContext.getResourceAsStream(String)也可以。
这两种方法都返回一个InputStream(您的资源数据),而不是您想要的File对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接