我在写一个jar内的.xml文件时遇到了问题。当我在我的Netbeans IDE中使用以下代码时,不会发生错误,并且它写入文件就好了。
public void saveSettings(){
Properties prop = new Properties();
FileOutputStream out;
try {
File file = new File(Duct.class.getResource("/Settings.xml").toURI());
out = new FileOutputStream(file);
prop.setProperty("LAST_FILE", getLastFile());
try {
prop.storeToXML(out,null);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.toString());
}
try {
out.close();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.toString());
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.toString());
}
}
然而,当我执行jar时,我收到一条错误说:
IllegalArguementException: uri is not hierachal
当我在Netbeans中运行它时,有没有人知道它为什么工作,但是当我执行jar时却没有工作。也有人有解决问题的方法吗?
答案 0 :(得分:0)
默认的类加载器期望类路径是静态的(因此它可以大量缓存),因此这种方法不起作用。
如果您可以获得合适的位置,可以将Settings.xml放在文件系统中。这很可能是特定于供应商和平台的,但可以完成。
答案 1 :(得分:0)
将Settings.xml
的位置添加到classpath
。
答案 2 :(得分:0)
我也在努力解决这个问题。但终于找到了解决方案。
当你使用.toURI()时,它会返回一些像
这样的东西D:/folderName/folderName/Settings.xml
因此你得到例外“URI不是分层的”
为了避免这次调用,返回的URI上的方法 getPath(),返回类似
的内容/D:/folderName/folderName/Settings.xml
现在是分层的。
在您的情况下,代码中的第5行应为
File file = new File(Duct.class.getResource("/Settings.xml").toURI().getPath());