0

我在写入 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 时它不工作。还有人有解决问题的方法吗?

4

3 回答 3

0

将 的位置添加Settings.xmlclasspath.

于 2012-01-14T20:55:27.907 回答
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());
于 2013-02-18T13:27:11.187 回答
0

默认的类加载器期望类路径是静态的(因此它可以大量缓存),所以这种方法不起作用。

如果你能找到合适的位置来放置它,你可以将 Settings.xml 放在文件系统中。这很可能是特定于供应商和平台的,但可以做到。

于 2012-01-14T20:39:19.917 回答