我需要从jar可执行文件中的java应用程序中读取外部XML文件
如果我从控制台(java -jar package.jar)吃午餐它可以正常工作,但是如果我通过双击(Java Platform SE二进制文件)来吃午餐它就无法工作。
我有相对路径的这个问题。
凭借绝对的道路,它可以双向运作。
答案 0 :(得分:4)
您需要将XML切片的(JAR相对)路径添加到Class-Path
文件中的MANIFEST.MF
条目。此条目包含有关JAR的运行时类路径的信息。假设您希望将XML与JAR文件本身放在同一文件夹中,以下内容就足够了:
Class-Path: .
(不要忘记在MANIFEST.MF
文件的末尾添加一个空行)
然后,您可以使用Class#getResource()
或ClassLoader#getResource()
将其作为类路径资源获取。第一个就足够了。
URL xmlResource = getClass().getResource("/filename.xml");
File xmlFile = new File(xmlResource.getPath());
// ...
答案 1 :(得分:1)
将该文件添加到JAR清单中的类路径,并将其作为输入流读取。
答案 2 :(得分:1)
答案 3 :(得分:0)
(new File(".")).getAbsolutePath();
应该给你jar路径。将其打印出来进行双重检查,然后将相对路径构建到其上。
答案 4 :(得分:0)
如果不知道您正在运行什么操作系统,很难给出准确的答案。
一般的答案是修改启动程序(桌面上的图标),以便指定初始工作目录与从shell运行命令时使用的目录相同。