【发布时间】:2011-04-09 18:39:55
【问题描述】:
我需要在 jar 可执行文件中从我的 java 应用程序中读取一个外部 XML 文件。
如果我从控制台(java -jar package.jar)午餐它工作正常,但如果我通过双击午餐它(Java 平台 SE 二进制)它不起作用。
我对相对路径有这个问题。
使用绝对路径,它可以双向工作。
【问题讨论】:
标签: java jar executable-jar
我需要在 jar 可执行文件中从我的 java 应用程序中读取一个外部 XML 文件。
如果我从控制台(java -jar package.jar)午餐它工作正常,但如果我通过双击午餐它(Java 平台 SE 二进制)它不起作用。
我对相对路径有这个问题。
使用绝对路径,它可以双向工作。
【问题讨论】:
标签: java jar executable-jar
您需要将 XML 磁贴的(JAR 相对)路径添加到 MANIFEST.MF 文件中的 Class-Path 条目。此条目包含有关 JAR 的运行时类路径的信息。假设您希望将 XML 与 JAR 文件本身放在同一文件夹中,则以下内容就足够了:
Class-Path: .
(别忘了在MANIFEST.MF 文件的末尾添加一个空行)
然后您可以使用Class#getResource() 或ClassLoader#getResource() 将其作为类路径资源获取。在您的情况下,第一个就足够了。
URL xmlResource = getClass().getResource("/filename.xml");
File xmlFile = new File(xmlResource.getPath());
// ...
【讨论】:
将该文件添加到 JAR 清单中的类路径中,并将其作为输入流读取。
【讨论】:
【讨论】:
(new File(".")).getAbsolutePath();
应该给你jar路径。打印出来仔细检查,然后在上面建立你的相对路径。
【讨论】:
如果不知道您运行的是什么操作系统,很难给出准确的答案。
一般的答案是修改您的启动器(桌面上的图标),以指定初始工作目录与您从 shell 运行命令时使用的目录相同。
【讨论】: