2013-12-19 3 views
0

Я использую следующий код для записи в файл XML, но каждый раз, когда я запускаю эту функцию, информация добавляется и не переписывается в 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();} 
} 
+0

Вы пытались использовать новый объект File в «new StreamResult (ff)», а затем удалить старый файл? Это не совсем то, что вы хотите, но .. – oli206

+0

Да, но я почему-то добавил только последний узел из связанного списка. –

+0

Не уверен, что он может иметь какое-то отношение к проблеме, но вы добавляете объект new_maker дважды в цикл for. Один для «корневого» объекта, а затем снова к объекту «rootElement», но они одинаковы. – oli206

ответ

3

Вместо того чтобы дать файл непосредственно в качестве аргумента StreamResult, попытаться дать FileOutputStream, который может принимать параметр конструктора ли добавляемые или нет ,

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

Одним из способов было бы стереть содержимое файла, прежде чем записать его, либо создать новый файл, который случается иметь такое же имя, или удалить файл и создание нового.

+0

Думаю, я просто удалю его. –

1

просто удалить файл перед сочинительством новых данных, новый будет создан автоматически

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

if (ff.exists()) { \t ff.delete();} \t Результат StreamResult = новый StreamResult (ff); Это то, что я сделал, но получаю исключение, которое гласит: java.io.FileNotFoundException –

Смежные вопросы