2010-09-08 102 views
3

我需要从我的java应用程序在jar可执行文件中读取外部XML文件。
如果我从控制台(java -jar package.jar)中进行午餐,它可以正常工作,但如果我通过双击(Java Platform SE SE binary)进行午餐,则它不起作用。
我有相对路径的这个问题。 绝对路径,它的工作方式。如何从jar中读取外部xml文件

回答

3

您需要将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()); 
// ... 
1

将该文件添加到JAR清单中的类路径中,并将其作为输入流进行读取。

+0

我该如何添加? – enfix 2010-09-08 14:31:03

+0

我读过它(db.parse(new File(filePath))),但我需要编辑,所以我不能将它包含到jar文件中。 – enfix 2010-09-08 14:31:42

+0

不,不FilePath - 这是脆弱和容易出错。 getResourceAsStream()是正确的读取方式。编辑和写作是另一回事。 – duffymo 2010-09-08 15:37:10

0
(new File(".")).getAbsolutePath(); 

应该给你的jar路径。打印出来仔细检查,然后建立你的相对路径。

+1

这将返回当前工作目录,而不是jar文件的路径。 – gawi 2010-09-08 14:44:37

0

很难给出一个准确的答案不知道你正在运行的操作系统。

一般的答案是修改启动器(桌面上的图标),以便将初始工作目录指定为与从shell运行命令时使用的目录相同。