有没有办法在jar文件中写入xml文件?

问题描述 投票:0回答:2

我正在尝试写入 XML 文件。在Eclipse中运行正确。该文件位于

ca/ism/wen/domain
文件夹(与我的 user.java 一起)。

但是,当我运行导出的可运行 jar 文件时,它会抛出

FileNotFoundException
。有没有办法在jar文件中写入xml文件?

以下是我的代码:

package ca.ism.wen.utils;

import java.io.File;
import java.io.InputStream;
    
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import ca.ism.wen.domain.User;

/**
 * Load XML file
 * 
 */

public class XmlFactory {

    private static Document dom;
    //private static File file = new File(User.class.getResource("UserRDP.xml").getPath());
    private static InputStream filei = User.class.getResourceAsStream("UserRDP.xml");
    private static File fileo = new File(User.class.getResource("UserRDP.xml").getPath());

    static {
        
        try{
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            dom = db.parse(filei);
        } catch (Exception e){
            e.printStackTrace();
        }
    }
    
    public static Document getDom(){
        return dom;
    }
    
    public static void saveDom(){
        try {
            TransformerFactory tf = TransformerFactory.newInstance();
            Transformer trans = tf.newTransformer();            
            DOMSource ds = new DOMSource(dom);
            StreamResult sr = new StreamResult(fileo);
            trans.transform(ds, sr);
        } catch (Exception e){
            throw new RuntimeException(e.getMessage(),e);
        }
    }
}

如果我必须将 XML 文件放在外部某个地方,我想获取一个可运行的文件并将其放在我的整个项目下的文件夹中(就像普通软件一样),因为它稍后可能会部署到其他人的计算机上。这可能吗?

java xml file resources
2个回答
0
投票

我相信您需要根据

javadoc
为您的类路径提供 javax.xml.parsers.DocumentBuilderFactory 的实现作为第三方库。


0
投票

尝试

new File(User.class.getResource("UserRDP.xml").toURI());

应使用

File
的适当构造函数来定位资源。此方法仅适用于爆炸的罐子。您无法写入 jar,但是您可以使用 jar 协议读取它。

© www.soinside.com 2019 - 2024. All rights reserved.