2013-10-17 3 views
0

J'essaie de créer un fichier csv à partir de l'analyse syntaxique des données xml. Lorsque j'exécute ce code, les données sont ajoutées au fichier sans écrire les données dans un nouveau fichier ou écraser l'ancien fichier.Comment écraser le fichier csv

 File fXmlFile = new File("d:/formdata.xml"); 
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
     Document doc = dBuilder.parse(fXmlFile); 
     doc.getDocumentElement().normalize(); 

     System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); 
     NodeList nList = doc.getElementsByTagName("record"); 
     System.out.println("----------------------------"); 
     List< Map<String, String>> list = new ArrayList<Map<String,String>>(); 

     for (int temp = 0; temp < nList.getLength(); temp++) { 
      Map<String, String> map = new HashMap<String, String>(); 
      Node nNode = nList.item(temp); 
      if (nNode.getNodeType() == Node.ELEMENT_NODE) { 
        Element eElement = (Element) nNode; 
        map.put("Item No", eElement.getElementsByTagName("item_no").item(0).getTextContent()); 
        map.put("Description", eElement.getElementsByTagName("description").item(0).getTextContent()); 
        map.put("price", eElement.getElementsByTagName("price").item(0).getTextContent()); 
        map.put("base qty", eElement.getElementsByTagName("base_qty").item(0).getTextContent()); 
        map.put("Var qty", eElement.getElementsByTagName("var_qty").item(0).getTextContent()); 
        list.add(map);    
       } 
     } 

     generateCsvFile("E:\\testCSV.csv", list); 

generateCsvfile()

private static void generateCsvFile(String sFilename, List< Map<String, String>> test) { 
    try { 
     FileWriter writer = new FileWriter(sFilename,true); 
     for (Map<String, String> map : test) {   

     Iterator iterator = map.entrySet().iterator(); 
     while (iterator.hasNext()) { 
      Map.Entry<String,String> mapEntry = (Map.Entry<String,String>) iterator.next(); 
      //ystem.out.println("key: " + mapEntry.getKey() + ", value:" + mapEntry.getValue()); 

      writer.append(mapEntry.getValue()); 
      writer.append(","); 
      iterator.remove(); 
     } 
     } 
     writer.flush(); 
     writer.close(); 
     }catch(Exception e){ 

    } 
} 

Comment écraser le fichier?

+0

à moins que vous êtes Pour ce faire, il existe des bibliothèques tierces qui vous permettent de créer des fichiers CSV. – Nishan

Répondre

1

Selon la réponse à ce question le deuxième argument au constructeur FileWriter est en fait l'indicateur qui détermine s'il faut ajouter ou écraser.

Essayez de changer votre déclaration constructeur de ce

FileWriter writer = new FileWriter(sFilename,true); 

à cette

FileWriter writer = new FileWriter(sFilename); 
0

Méfiez-vous des erreurs de syntaxe possibles, mais le concept reste le même. Insérez ceci dans votre fichier generateCsvFile juste après la déclaration de la variable de fichier. Fondamentalement, ce que vous faites est de vérifier si le fichier existe, et essayez de le supprimer si c'est le cas. Si l'opération échoue cependant, la méthode entière est annulée, ce qui empêche l'application d'ajouter l'information à un fichier existant.

0

Votre generateCsvFile() devrait ressembler un peu comme ceci:

private static void generateCsvFile(String sFilename, List< Map<String, String>> test) { 
    try { 
     FileWriter writer = new FileWriter(sFilename,true); 
     for (Map<String, String> map : test) {   

      Iterator iterator = map.entrySet().iterator(); 
      while (iterator.hasNext()) { 
       Map.Entry<String,String> mapEntry = (Map.Entry<String,String>) iterator.next();   
       writer.append(mapEntry.getValue()); 
       writer.append(",");   
      } 
      writer.append("\n"); 
     } 
     writer.flush(); 
     writer.close(); 
    } catch(Exception e) { 

    } 
} 
Questions connexes