【发布时间】:2016-10-20 12:57:14
【问题描述】:
我的代码在 JAR 文件中运行,我需要获取该文件的完整路径。 例如,我的 JAR 名为 example.jar,位于 D:\example\ 所以我需要通过该 jar 中的一些代码获取“D:\example\example.jar”。 我已经尝试了很多方法来获得该路径,但没有一个能正常工作。
其中一个是
getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath()
很多人说这对他们有用,但它为我返回“rsrc:./”。
之后我进行了搜索,发现我的 MANIFEST.MF 包含以下内容:
Manifest-Version: 1.0
Rsrc-Class-Path: ./
Class-Path: .
Rsrc-Main-Class: Example
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
我不知道那是什么意思,但是如果我删除那个 Rsrc 的东西并用它替换其他的东西,它就会说 jar 坏了。我认为这就是它不起作用的原因。有人知道这是什么意思吗?
PS:我正在使用 BAT 文件运行我的 JAR。
【问题讨论】:
-
为什么要获取JAR的路径?
-
getPath()不将 URI 转换为文件。即使它是一个文件:URI,路径部分也可能包含百分比转义,因此使用 getPath() 最终将返回一个不是有效文件名的字符串。将 URI 转换为文件名的正确方法是Paths.get(uri),但它仅适用于 file: URI。也就是说,无论您尝试做什么,都可以并且应该使用 Class.getResource 或 ClassLoader.getResource 来完成。 -
你可以得到jar本身的路径,但是谈论jar中文件的文件路径是没有意义的。
-
@SJuan76 我想将 JAR 中的一些文件和文件夹复制到 JARs 目录中。如果我只输入“D:\example\example.jar”就可以了,但路径并不总是相同的。
-
@VGR 我如何使用 Class(Loader).getResource() 找出 JAR 路径?
标签: java jar path manifest rsrc