使用java将多个csv文件合并为一个?

时间:2011-05-20 04:45:52

标签: java csv

我需要一个结合多个CSV文件的健壮方法,同时考虑到换行符等。如果可能,请帮助我并提供一些代码。

或者至少帮助我了解组合它们时我应该期待的所有场景。

问候

5 个答案:

答案 0 :(得分:1)

如果您使用的是基于Unix的计算机(Linux或OSX),您可以使用终端中的cat将文件连接在一起。

如果你绝对想要使用Java,这个论坛post涵盖了主题并提供了示例代码。

此外,此stackoverflow post涵盖了这个主题。

答案 1 :(得分: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

答案 2 :(得分:0)

单独读取它们,将它们输出到一个文件中。您还可以添加一些代码来检查两个csv文件中的记录是否具有相同的列数,否则会出错。

这不是特定于Java的问题。

答案 3 :(得分:0)

继续使用user453441的答案,同时检查分隔符。很多时候'逗号'分隔值实际上是 - (因为某些商业条件,如地址行可以包含逗号) - 由不同的分隔符分隔。

答案 4 :(得分: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();