Java 重写而不是附加到XML文件

Java 重写而不是附加到XML文件,java,xml,Java,Xml,我使用下面的代码来写入XML文件,但每次运行此函数时,信息都会被追加,而不会在XML文件中重写 为了重写文件而不是每次都附加信息,我应该更改什么 以下是函数: public void write2file(LinkedList<Customer> customers, File ff) { try { DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInsta

我使用下面的代码来写入XML文件,但每次运行此函数时,信息都会被追加,而不会在XML文件中重写

为了重写文件而不是每次都附加信息,我应该更改什么

以下是函数:

public void write2file(LinkedList<Customer> customers, File ff) {
    try {

        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        Document document = documentBuilder.parse(ff);
        Element root = document.getDocumentElement();

        // Root Element
        Element rootElement = document.getDocumentElement();

        for (Customer i : customers) {
            // server elements
            Element new_marker = document.createElement("Marker");
            rootElement.appendChild(new_marker);

            Element name = document.createElement("title");
            name.appendChild(document.createTextNode(i.getTitle()));
            new_marker.appendChild(name);

            Element loc = document.createElement("site_location");
            loc.appendChild(document.createTextNode(i.getLocation()));
            new_marker.appendChild(loc);

            Element latitude = document.createElement("latitude");
            latitude.appendChild(document.createTextNode(i.getLatitude()));
            new_marker.appendChild(latitude);

            Element longitude = document.createElement("longitude");
            longitude.appendChild(document.createTextNode(i.getLongitude()));
            new_marker.appendChild(longitude);

            Element status = document.createElement("status");
            status.appendChild(document.createTextNode(i.getStatus()));
            new_marker.appendChild(status);

            root.appendChild(new_marker);
        }

        DOMSource source = new DOMSource(document);

        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        StreamResult result = new StreamResult(ff);
        transformer.transform(source, result);

    } 
    catch (SAXException e) {
        e.printStackTrace();} 
    catch (IOException e) {
        e.printStackTrace();}
    catch (ParserConfigurationException pce) {
        pce.printStackTrace();}
    catch (TransformerException tfe) {
        tfe.printStackTrace();}
}
public void write2文件(LinkedList客户,文件ff){
试一试{
DocumentBuilderFactory DocumentBuilderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder DocumentBuilder=documentBuilderFactory.newDocumentBuilder();
文档=documentBuilder.parse(ff);
元素根=document.getDocumentElement();
//根元素
Element rootElement=document.getDocumentElement();
针对(客户i:客户){
//服务器元素
Element new_marker=document.createElement(“marker”);
根元素.appendChild(新的_标记);
元素名称=document.createElement(“标题”);
name.appendChild(document.createTextNode(i.getTitle());
新的_标记。追加子项(名称);
元素位置=document.createElement(“站点位置”);
loc.appendChild(document.createTextNode(i.getLocation());
新的附加子标记(loc);
元素纬度=document.createElement(“纬度”);
appendChild(document.createTextNode(i.getLatitude());
新的_标记。追加子项(纬度);
元素经度=document.createElement(“经度”);
appendChild(document.createTextNode(i.getLongitude());
新的_标记。追加子项(经度);
元素状态=document.createElement(“状态”);
appendChild(document.createTextNode(i.getStatus());
新的_标记。追加子项(状态);
根.appendChild(新的_标记);
}
DOMSource=新的DOMSource(文档);
TransformerFactory TransformerFactory=TransformerFactory.newInstance();
Transformer Transformer=transformerFactory.newTransformer();
StreamResult结果=新的StreamResult(ff);
变换(源、结果);
} 
捕获(SAXE异常){
e、 printStackTrace();}
捕获(IOE异常){
e、 printStackTrace();}
捕获(ParserConfiguration异常pce){
pce.printStackTrace();}
捕获(TransformerException tfe){
tfe.printStackTrace();}
}

一种方法是在写文件之前擦除文件内容,或者创建一个恰巧同名的新文件,或者删除文件并创建一个新文件。

一种方法是在写文件之前擦除文件内容,或者创建一个恰巧同名的新文件,或者删除文件并创建新文件。

只需在写入新数据之前删除文件,就会自动创建新文件

Transformer transformer = transformerFactory.newTransformer();
ff.delete();
StreamResult result = new StreamResult(ff);

只需在写入新数据之前删除文件,就会自动创建新数据

Transformer transformer = transformerFactory.newTransformer();
ff.delete();
StreamResult result = new StreamResult(ff);

不要直接将file作为StreamResult的参数,而是尝试给出FileOutputStream,它可以接受构造函数参数来决定是否追加

new StreamResult(new FileOutputStream(ff, false));

不要直接将file作为StreamResult的参数,而是尝试给出FileOutputStream,它可以接受构造函数参数来决定是否追加

new StreamResult(new FileOutputStream(ff, false));

您是否尝试在“new StreamResult(ff)”中使用新文件对象,然后删除旧文件?这不完全是您想要的,但是..是的,我做了,但出于某种原因,它只添加了链接列表中的最后一个节点。不确定这是否与问题有关,但您在for循环中添加了两次新的\u maker对象。一个指向“根”对象,然后再次指向“根元素”对象,但它们是相同的。您是否尝试在“新StreamResult(ff)”中使用新文件对象,然后删除旧文件?这不完全是您想要的,但是..是的,我做了,但出于某种原因,它只添加了链接列表中的最后一个节点。不确定这是否与问题有关,但您在for循环中添加了两次新的\u maker对象。一个指向“root”对象,然后再次指向“rootElement”对象,但它们是相同的。我想我只会删除它。我想我只会删除它。如果(ff.exists()){ff.delete();}StreamResult result=new StreamResult(ff);这就是我所做的,但是我得到了一个异常,它是:java.io.FileNotFoundExceptionif(ff.exists()){ff.delete();}StreamResult=newstreamresult(ff);这就是我所做的,但我得到一个异常,它是java.io.FileNotFoundException