我开发了一个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中独立运行,就像在窗口机器中一样?
不要依赖当前目录来读取应用程序附带的文件.相反,使用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)
归档时间: |
|
查看次数: |
13941 次 |
最近记录: |