【问题标题】:Load a file outside of a Jar在 Jar 之外加载文件
【发布时间】:2014-07-07 21:22:17
【问题描述】:

我有一个名为 lib 的文件夹,其中包含我的所有 Jar 文件,并且在其中一个 Jar 文件类中,我有一个由批处理文件调用的 main 方法。在与我的 lib 相同的文件夹位置中,我有另一个文件夹结构 path/to/a/resource/myresource.txt

如何从 Jar 文件中的类加载此文件?我尝试了以下方法,结果都为空:

getClass().getResource("path/to/a/resource/myresource.txt")
getClass().getClassLoader().getResource("path/to/a/resource/myresource.txt")

有什么想法吗?即使使用绝对路径,它也失败了!有什么建议吗?

【问题讨论】:

  • 使用FileReader 这样做。
  • 您是否更新了 jar 清单中的 Class-Path 条目?

标签: java


【解决方案1】:

你可以使用:

getClass().getResourceAsStream("path/to/a/resource/myresource.txt")

但是,要使其正常工作,您需要添加路径 '.'到 JAR 的 MANIFEST.MF 文件的 Class-Path 条目。

http://docs.oracle.com/javase/tutorial/deployment/jar/downman.html

【讨论】:

    【解决方案2】:

    您尝试的两件事用于从类路径读取文件,因为此文件夹不在您的类路径中,您可以使用任何 java File IO 类直接读取它。

    【讨论】:

      【解决方案3】:
      File file = new File("C:/folder/myFile.txt");
      

      或者如果你知道相对路径:

       File file = new File("../../path/myFile.txt");
      

      【讨论】:

        【解决方案4】:

        您的路径似乎不够精确。此外,这个问题之前已经解决过。

        看看这里:

        How to Load File Outside of, but Relative to, the JAR?

        How to get the path of a running JAR file?

        【讨论】:

          【解决方案5】:

          您可以从文件系统加载文件

          new FileReader(relativeOrAbsoluteFilesystemLocation)
          

          或者您可以将相关目录添加到您的类路径中:

          java -cp "lib/*;lib" ...
          

          然后使用你原来的方法。

          (Unix 使用: 而不是; 作为类路径分隔符)

          【讨论】:

            猜你喜欢
            • 2011-07-03
            • 2015-05-03
            • 2012-12-06
            • 1970-01-01
            • 1970-01-01
            • 2015-08-27
            • 2014-12-30
            • 2016-04-10
            • 1970-01-01
            相关资源
            最近更新 更多