2015-01-11 68 views
0

我已經設法以我想要的方式寫入一個xml文件,但它只會在程序退出後更新文件。我希望在按下按鈕後立即更新文件。如何在程序運行時寫入xml文件?

這裏是我使用的代碼。它在JButton被點擊時運行。

try { 
     documentFactory = DocumentBuilderFactory.newInstance(); 
     documentBuilder = documentFactory.newDocumentBuilder(); 
     xmlDoc = documentBuilder.parse(Reminders.class.getResourceAsStream("Reminders.xml")); 
    } catch(ParserConfigurationException | SAXException | IOException e) { 
     e.printStackTrace(); 
    } 

    Node rNode = xmlDoc.getChildNodes().item(0); 
    Node remindersNode = xmlDoc.getElementsByTagName("reminders").item(0); 
    Node newReminder = xmlDoc.createElement("r" + remindersNode.getChildNodes().getLength()/2); 

    // Elements are created and put together 
    // Redacted because they take up too much space 

    OutputFormat outFormat = new OutputFormat(xmlDoc); 
    outFormat.setIndenting(true); 

    try { 
     FileOutputStream outStream = new FileOutputStream("src/virtualagenda/Reminders.xml"); 
     XMLSerializer serializer = new XMLSerializer(outStream, outFormat); 
     serializer.serialize(xmlDoc); 

     outStream.flush(); 
     outStream.close(); 

    }catch(IOException e) {e.printStackTrace();} 
+0

該文件是_updated_或_created_?當它不在之前,你能看到它被創建嗎? – ptrk

+0

它正在更新。我必須手動創建該文件並在其工作之前添加幾個節點。 – alexanderd5398

+0

但是源代碼和目標路徑是不同的:「Reminders.xml」vs「src/virtualagenda/Reminders.xml」 – ptrk

回答

1

如何只關閉它:

outStream.flush(); 
outStream.close(); 

逼寫?

+0

我加了它,發生了同樣的事情。 – alexanderd5398

+0

您是否可以確保線條被執行兩次(或多次) - 假設按鈕可以被多次點擊?我敢打賭,有一些關於處理點擊,而不是沖洗outStream的內容。 – ptrk

+0

我不太清楚你的意思,但是我讓程序在這些行後面打印一些東西,並且每當我按下按鈕時打印它。 – alexanderd5398

1

您必須沖洗FileOutputStream

FileOutputStream outStream = new FileOutputStream("src/virtualagenda/Reminders.xml"); 
XMLSerializer serializer = new XMLSerializer(outStream, outFormat); 
serializer.serialize(xmlDoc); 
outStream.flush() 

或者,如果你與流完成後,用outStream.close()

+0

我試過了,沒有任何改變。 – alexanderd5398

相關問題