【问题标题】:Accessing files packaged into a jar file访问打包到 jar 文件中的文件
【发布时间】:2011-02-02 11:11:40
【问题描述】:

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

我尝试只使用不起作用的相对路径。 如何获得指向 jar 中文本文件的 File 对象?

有没有办法做到这一点,这样它在运行未打包的类文件和从具有相同代码的 jar 时都可以工作,还是我需要使用单独的函数?

【问题讨论】:

    标签: java jar


    【解决方案1】:

    在 jar 中,您可以像 Class.getResourceAsStream(String) 一样使用它,或者类似的东西。

    从外面看,它不是它的 jar 文件,所以你必须提取它才能实际使用内部文件

    【讨论】:

    • 这是文件。没有办法获取指向目录的 File 对象,所以可以获取子文件,对吧?
    • 在 jar 里面它不是一个文件,实际上它是一个资源。你可以告诉我你想做什么,以便我可以建议你更好的方法
    • 我使用 FreeMarker 库作为模板引擎,我将模板目录 (File) 作为模板的基础目录传递。从 IDE 运行时,与目录的普通 File 对象配合得很好。不,我希望它也可以从单个 Jar 文件运行。我设法将文件打包到 jar 中。我会将文件提取到临时目录,还是有更好的方法?
    • 我不知道 FreeMarker 如果您想从 jar 外部访问文件,那么提取是唯一的方法。否则,如果您正在从其他 jar 访问文件,war 在类路径中有包含文件的 jar,您可以在上面使用 getResourceAsStream()
    【解决方案2】:

    如果您在应用程序中使用 JAR,那么 Class.getResourceAsStream(String) 就可以了。

    或者,如果您使用的是 Servlet,那么 ServletContext.getResourceAsStream(String) 也可以。

    这两个方法返回一个InputStream(你的资源数据),而不是你想要的File对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 2013-05-24
      • 2021-03-05
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 2011-04-10
      相关资源
      最近更新 更多