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