我开发了一个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中独立工作,就像在窗口机器中一样?
答案 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"));