# Xml nicht überschreiben!



## deddeda (13. Feb 2015)

Hallo Zusammen

Ich habe eine Klasse erstellt welche ein XML-File erzeugt. Die Methode writeXML wird aufgerufen bei Knopfdruck eines Gui's. Dort werden auch die Parameter mitgegeben. 

```
package Praktikum_Anruf;



import java.io.File;
import java.security.Timestamp;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.UUID;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
 


import javax.swing.text.JTextComponent;

import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
 
public class Xml {


    static Calendar cal = Calendar.getInstance ();
	

    
    public static void writeXML(String origin, String target, String feature){
    	  try {
    			DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    			DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
    	 
    			// root elements
    			Document doc = docBuilder.newDocument();
    			Element rootElement = doc.createElement("LynCallForwardSettings");
    			doc.appendChild(rootElement);
    	 
    			// Anrufe umleiten zu: elements
    			Element test = doc.createElement("OriginUserName");
     			test.appendChild(doc.createTextNode(origin));
    			rootElement.appendChild(test);
    			
    			
    			Element lastname = doc.createElement("TargetUserName");
    			lastname.appendChild(doc.createTextNode(target));
    			rootElement.appendChild(lastname);
    			
    			Element callForwarFeature = doc.createElement("CallForwardFeature");
    			callForwarFeature.appendChild(doc.createTextNode(feature));
    			rootElement.appendChild(callForwarFeature);
    	 


    			// write the content into xml file
    			TransformerFactory transformerFactory = TransformerFactory.newInstance();
    			Transformer transformer = transformerFactory.newTransformer();
    			DOMSource source = new DOMSource(doc);

    			
    			//Dateiname
    			String pfad = ReadXml.getSavePath();
    			System.out.println(pfad + "-----------------------------------");
    			
    					
    					
    			StreamResult result = new StreamResult(new File
    					(pfad	+
    								cal.get( Calendar.DAY_OF_MONTH ) +
    	                "_" +		(cal.get( Calendar.MONTH )  +1) +
    	                "_" + 		cal.get( Calendar.YEAR ) +
    	                "_"	+		cal.get( Calendar.HOUR_OF_DAY ) + 
    					"_" +		cal.get( Calendar.MINUTE ) + 
    					"_" +       cal.get( Calendar.SECOND ) + 
    					"_" +       (cal.get( Calendar.MILLISECOND )  +1) + 
    					".xml"));
    	 
    			// Output to console for testing
    			// StreamResult result = new StreamResult(System.out);
    	 
    			transformer.transform(source, result);
    	 
    			

    			System.out.println("File saved!");
    		
    			
    		  } catch (ParserConfigurationException pce) {
    			pce.printStackTrace();
    		  } catch (TransformerException tfe) {
    			tfe.printStackTrace();
    		  }
    }
    
	public static void main(String args[]) {
		
		Gui gui = new Gui();
		
	
	}
	
	
}
```

Hier der Aufruf in der anderen Klasse: 

```
btnFunktion.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {

				if (rdbtnAnrufumleitungaktivieren.isSelected()) {
					lblNewLabel1.setVisible(false);
					lblNewLabel2.setVisible(false);
					lblNewLabel3.setVisible(false);
					lblNewLabel.setVisible(true);
					verticalBox_1.setVisible(true);
					setFunktion("1");

				} else if (rdbtnSatusDerAnrufumleitung.isSelected()) {
					lblNewLabel1.setVisible(true);
					lblNewLabel2.setVisible(false);
					lblNewLabel3.setVisible(false);
					lblNewLabel.setVisible(false);
					verticalBox_1.setVisible(true);
					setFunktion("3");
				} else if (rdbtnAnrufumleitungdeaktivieren.isSelected()) {
					lblNewLabel1.setVisible(false);
					lblNewLabel2.setVisible(true);
					lblNewLabel3.setVisible(false);
					lblNewLabel.setVisible(false);
					verticalBox_1.setVisible(true);
					setFunktion("2");
				} else {
					lblNewLabel1.setVisible(false);
					lblNewLabel3.setVisible(true);
					lblNewLabel2.setVisible(false);
					lblNewLabel.setVisible(false);
					verticalBox_1.setVisible(true);

				}
				
				try{
					//Testet ob auswahl getroffen ist
				if (getFunktion().equalsIgnoreCase(null)) {
					
				}
				else{
					Xml.writeXML(getTextField(), getTextField1(), getFunktion());
					
				}
				}catch(Exception e1){
					System.out.println("Keine Auswahl getroffen");
				}

				
				
			};
			
		
		});
```


Als Dateiname brauche ich immer die aktuelle Zeit plus Datum, alles funktioniert so weit. Doch leider wird das File immer nur überschrieben solange ich das Gui geöffnet habe. Erst wenn ich das Gui schliesse wird wieder eine neue Datei erzeugt. Was muss ich ändern, dass die Datei nicht immer überschrieben wird.?

Vielen Dank und Gruss

Dimitri


----------



## Harry Kane (14. Feb 2015)

Vor dem Speichern musst du deine Calendar-Instanz auf die aktuelle Systemzeit setzen:

```
cal.setTimeInMillis(System.currentTimeMillis())
```


----------

