写入jar内的文件

时间:2012-01-14 20:23:07

标签: java jar illegalargumentexception writetofile

我在写一个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时却没有工作。也有人有解决问题的方法吗?

3 个答案:

答案 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());