Java system.getProperty(“user.dir”)在ubuntu中给出了错误的结果

时间:2009-10-12 13:10:41

标签: java ubuntu

我开发了一个Java应用程序,它能够在JRE版本中以至少1.6.0.14的条件运行跨平台。一切都在Windows机器上正常工作(JRE1.6.0.14),但不需要的结果是Ubuntu 8.04与JRE1.6.0.14。

我在这里发现了错误:

Document doc = docBuilder.parse (new File("webservices.xml"));

在Windows机器上,一切正常,docBuilder将引用我的应用程序所在的文件。 示例:如果我的应用程序位于C:\ myApp \ start.jar,它将引用C:\ myApp \ webservices.xml中的webservives.xml(这意味着无论我在何处移动应用程序文件夹,它都将始终引用正确的目录)< / p>

但是在Ubuntu 8.04中它不起作用。

我可以在应用程序中使用它来解决问题:

String curDir = System.getProperty("user.dir");
System.out.println(curDir);

无论我将应用程序文件夹放在何处,curDir始终返回“/ home / user”。在将webservices.xml放在/home/user/webservices.xml目录中之前,Document doc = docBuilder.parse (new File("webservices.xml"))不起作用。

在Ubuntu中使用Netbean 6.5.1运行我的应用程序返回正确的curDir但运行我的应用程序独立返回错误的curDir(我使用JDK1.6.0.14和JRE1.6.0.14与窗口机相同)

为什么Document doc = docBuilder.parse (new File("webservices.xml"))无法在ubuntu JRE1.6.0.14中正常工作?

是否有任何想法让我的应用程序在Ubuntu 8.04中独立工作,就像在窗口机器中一样?

4 个答案:

答案 0 :(得分:9)

不要依赖当前目录来读取应用程序附带的文件。相反,使用ClassLoader.getResource()(访问相对于类路径的文件)或Class.getResouce()来访问包内的文件。

编辑:以上内容仅适用于只读访问。将被修改的文件应存储在用户的主目录(系统属性user.home)中,而不是应用程序目录中,因为后者会导致许多问题:

  • 同时运行应用程序的多个用户可能会覆盖彼此的更改
  • 用户无法轻松备份或迁移数据
  • 与正确安全的用户权限系统不兼容,普通用户没有对应用程序目录的写访问权以防止病毒感染应用程序。

对于少量数据,您可以使用Java preferences API

<强> EDIT2 : 对于该特定要求,这应该工作(需要文件在类路径中):

Document doc = docBuilder.parse (
    new File(getClass().getClassLoader().getResource("webservices.xml").toURI()););

答案 1 :(得分:7)

System.getProperty("user.dir")返回用户执行程序的当前目录,而不是程序所在的位置。

答案 2 :(得分:2)

user.dir是shell的当前工作目录,因此您首先cd Sun Java tutorial definition of user.dir

答案 3 :(得分:-2)

尝试

Document doc = docBuilder.parse(new File("./webservices.xml"));