【问题标题】:Folders can not be found after converting a JAVA project into a runnable JAR将 JAVA 项目转换为可运行 JAR 后找不到文件夹
【发布时间】:2018-01-28 08:01:05
【问题描述】:

我希望有人可以帮助我解决我的问题。经过数小时扫描有关上述主题的所有不同帖子后,我现在决定回答我自己的问题。其他帖子都没有解决我的问题。

我想将现有的 JAVA 项目导出为可运行的 JAR。因此,我将所有绝对引用更改为以下内容:

this.getClass().getResource("/somekindofimage.png").toString();

这样我可以访问可运行 JAR 中的所有可用文件。

但是我需要引用一个文件夹...所以我尝试了相同的方式:

this.getClass().getResource("/somekindoffolder").toString();

这给了我以下路径:

file:\C:\Users\...\1_data_collection

通过创建一个文件并使用“is.Directory”检查它返回 false。 我解压缩了可运行的 JAR。包括所有文件夹,所有需要的文件。它们通过 BuildPath 作为源附加。

当我使用 Windows 资源管理器测试上述路径时,它会将我定向到我正在寻找的文件夹。

我使用 Eclipse Neon 2 作为 IDE,我的 JAVA 版本是 1.8-0_144。 提前致谢!

【问题讨论】:

  • 简单地说,你不能。 .jar 文件中没有文件夹。 .jar 文件实际上是一个 zip 文件,它只是一个条目列表,其中包含恰好看起来像文件路径的字符串名称。无法在“文件夹”中“列出”文件。但由于您是构建 .jar 的人,因此您确切知道要放入其中的文件,因此您可以创建一个简单的文本文件来列出这些文件,并让您的应用程序读取该文本文件。
  • 当我解压缩档案时,实际上 JAR 中有文件夹。正如我提到的,我需要的所有资源都是可用的。我不想列出文件...我只想获取文件夹的引用..将其提供给我想使用的插件。
  • Class.getResource 返回一个 URL,而不是文件名。因此,如果将其转换为字符串,您将没有有效的文件路径。事实上,没有办法可靠地将 URL 转换为有效的文件路径,因为 .jar 中的条目不是文件,它只是字节的子序列。如果某些 API 需要文件夹,您需要创建一个文件夹并将捆绑的项目复制到其中。 Files.createTempDirectory 对此很有用。

标签: java jar directory runnable getresource


【解决方案1】:

您不能使用文件路径来引用 JAR 中的文件。您必须从类路径中将它们作为资源加载。

确保您需要的资源和依赖项已打包在 JAR 中。有一个 Maven Shade 插件,如果您使用 Maven,它会为您完成。

【讨论】:

  • 感谢您的回答 - 正如我所提到的,所有文件夹和文件都包含在 JAR 中,因为它们在构建路径中配置为源文件夹。所以问题是我如何访问它们,或者你的意思是应该按照我提到的方式访问它们?
  • 不可能按照您的方式进行。你的代码已经告诉你了。您需要从 JAR 类路径中以流资源的形式访问文件。确保也有适当的清单文件来正确设置类路径。
猜你喜欢
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2014-07-07
  • 1970-01-01
相关资源
最近更新 更多