我需要一个结合多个CSV文件的健壮方法,同时考虑到换行符等。如果可能,请帮助我并提供一些代码。
或者至少帮助我了解组合它们时我应该期待的所有场景。
问候
答案 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();