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

win*_*520 0 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"));
Run Code Online (Sandbox Code Playgroud)

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

但在Ubuntu 8.04中它不起作用.

我可以通过在应用程序中使用它来找出问题:

String curDir = System.getProperty("user.dir");
System.out.println(curDir);
Run Code Online (Sandbox Code Playgroud)

无论我在哪里放置我的应用程序文件夹,curDir总是返回"/ home/user".Document doc = docBuilder.parse (new File("webservices.xml"))直到我将webservices.xml放在目录/home/user/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中独立运行,就像在窗口机器中一样?

Mic*_*rdt 9

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

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

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

对于少量数据,您可以使用Java首选项API.

Edit2:对于那个特定的要求,这应该工作(需要文件在类路径中):

Document doc = docBuilder.parse (
    new File(getClass().getClassLoader().getResource("webservices.xml").toURI()););
Run Code Online (Sandbox Code Playgroud)


not*_*oop 7

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