2013-10-17 113 views
0

我试图通过解析xml数据来创建csv文件。当我执行此代码时,每次都将数据附加到文件中,而不是将数据写入新文件或覆盖旧文件。如何覆盖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){ 

    } 
} 

如何覆盖该文件?

+0

除非你是为了学习交易,有第三方库可以让你建立CSV文件。 – Nishan

回答

1

根据对此question的回答,FileWriter构造函数的第二个参数实际上是确定是追加还是覆盖的标志。

尝试从此

FileWriter writer = new FileWriter(sFilename,true); 

改变你的构造函数语句这个

FileWriter writer = new FileWriter(sFilename); 
0

请注意可能的语法错误,但概念保持不变。 在filewriter变量声明之后放置在generateCsvFile中。

if (sFilename.exists()) { 
    try { 
     sFilename.delete(); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
     return; 
    } 
} 

基本上,你要做的是检查文件是否存在,如果存在,试着删除它。如果操作失败,则整个方法将被取消,从而阻止应用程序将信息附加到现有文件。

0

你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();   
       writer.append(mapEntry.getValue()); 
       writer.append(",");   
      } 
      writer.append("\n"); 
     } 
     writer.flush(); 
     writer.close(); 
    } catch(Exception e) { 

    } 
}