2013-11-11 3 views
1

Я пытаюсь записать xml-данные в файл csv. Все работает нормально, за исключением случаев, когда длина данных слишком длинная, а затем записывает данные в новую строку. Например, если адрес слишком длинный, то он переходит к следующей строке и затем записывает данные.Поместите данные в одну строку В csv-файл

public class ExportToCSV { 

public static final String LINE_BREAK = "\n"; 
List<Line> lines = new ArrayList<Line>(); 
public static void main(String argv[]) { 

    try { File fXmlFile = new File("C:/Users/Master/Desktop/demo_jar/Eff_SOR.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("Address", eElement.getElementsByTagName("address_").item(0).getTextContent());         
        map.put("Price1", eElement.getElementsByTagName("price1").item(0).getTextContent());     
        map.put("Base_qty1", eElement.getElementsByTagName("base_qty1").item(0).getTextContent()); 
        map.put("base_price1", eElement.getElementsByTagName("base_price1").item(0).getTextContent());   

        list.add(map);    
       } 
     } 

     generateCsvFile("C:\\Users\\Master\\Desktop\\demo_jar\\testCSV.csv", list); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

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

     writer.append("Address"); 
     writer.append(","); 
     writer.append("Price1"); 
     writer.append(","); 
     writer.append("Base_qty1"); 
     writer.append(","); 
     writer.append("Price2"); 
     writer.append(","); 
     writer.append("base_price1"); 
     writer.append(",");   
     writer.append(LINE_BREAK); 

     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.append(LINE_BREAK); 
     } 
     writer.flush(); 
     writer.close(); 
    }catch(Exception e){ 

    } 
} 
} 
+0

Как вы подтверждаете, что это еще одна строка? Может быть, вы должны использовать хороший редактор, который вы можете настроить, чтобы не вставлять строки для чтения, но показывает только строки в файле. – Matthias

+0

Вы можете распечатать строку строки demo, которая пересекает границу ячейки –

+0

@Matthias Я просто проверяю выходной файл. Если я использовал любой редактор, тогда evrrthng работает нормально, но я хочу сделать это только с java – Aanshi

ответ

1

.csv это просто текстовый файл с запятыми используются для разделения значений полей - Таким образом, нет никакого способа, вы можете управлять размерами ячеек, которые будут отображаться, когда файл открыт первым в Excel.

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