2011-05-20 180 views
2

我需要一個可靠的方法,結合多個CSV文件,考慮換行符等。請幫助我,並提供一些代碼,如果可能的話。將多個csv文件合併爲一個使用java?

,或者至少幫我什麼時候將它們結合起來所有的場景應該期待。

關於

+0

你有現成的代碼一起工作? – 2011-05-20 04:53:59

+0

您可以查看[csv-merger](https://github.com/riyadparvez/csv-merger)github項目。 – user 2013-03-12 06:13:24

回答

1

那麼,如果您使用基於Unix的計算機(Linux或OSX),則可以使用終端的cat將文件連接在一起。

如果你絕對要使用Java,本次論壇post涵蓋的話題,並提供示例代碼。

而且,這個計算器post涉及這個題目。

+0

哎瑞安論壇發帖正是我一直在尋找。該stckoverflow職位是有點含糊和結果時,我搜索..感謝 – user727272 2011-05-20 05:15:00

+0

任何原因,我得到了下來票沒有露面?將不勝感激的反饋,所以我可以繼續在這裏改善我的答案在stackoverflow。 – 2011-05-20 15:01:00

+0

我給你一個upvote。你的答案是絕對有用的 – user727272 2011-05-23 04:01:52

0

分別讀取它們,將它們輸出到一個文件中。您還可以添加一些代碼來檢查來自兩個csv文件的記錄是否具有相同的列數,否則會出錯。

這不是一個真正的Java特定問題。

0

與user453441的回答延續,也檢查了分離。實際上,許多時間'逗號'分隔值(由於某些商業條件,如地址行可以包含逗號) - 由不同的分隔符分隔。

1

您可以使用這樣的分析數據:http://opencsv.sourceforge.net/

1)我會分析每個CSV到字符串數組的每一行。使用.equals或compareto來比較每個數組的初始行,以確保您處理的是相同的CSV,您可以將其設置爲解析器第一行中的一個檢查,如果它們不是相同的類型。

一旦這樣做,你可以刪除所有陣列的第一行預期,則第一陣列它們合併起來,然後寫一個排序方法的數據,那麼打印到文件。

2)更簡單的方法是,將所有CSV,掃描到第一行,比較它們,如果它們相同,則將整個CSV掃描到多個字符串數組中,合併,然後使用File類將數組寫入file.csv。

另一個CSV解析:http://commons.apache.org/sandbox/csv/apidocs/org/apache/commons/csv/CSVParser.html

0
String[] headers = null; 
String firstFile = "/path/to/firstFile.dat"; 
Scanner scanner = new Scanner(new File(firstFile)); 

if (scanner.hasNextLine()) 
    headers[] = scanner.nextLine().split(","); 

scanner.close(); 

Iterator<File> iterFiles = listOfFilesToBeMerged.iterator(); 
BufferedWriter writer = new BufferedWriter(new FileWriter(firstFile, true)); 

while (iterFiles.hasNext()) { 
    File nextFile = iterFiles.next(); 
    BufferedReader reader = new BufferedReader(new FileReader(nextFile)); 

    String line = null; 
    String[] firstLine = null; 
    if ((line = reader.readLine()) != null) 
    firstLine = line.split(","); 

    if (!Arrays.equals (headers, firstLine)) 
    throw new FileMergeException("Header mis-match between CSV files: '" + 
       firstFile + "' and '" + nextFile.getAbsolutePath()); 

    while ((line = reader.readLine()) != null) { 
    writer.write(line); 
    writer.newLine(); 
    } 

    reader.close(); 
} 
writer.close(); 
相關問題