有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java写入jar中的文件

我在给一家公司写信时遇到了问题。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) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

    Settings.xml的位置添加到classpath

  3. # 3 楼答案

    我也在为这个例外而挣扎。但最终找到了解决办法

    当你使用。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());