【发布时间】: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