Merge CSV files into a single file with no repeated headers

后端 未结 5 1530
挽巷
挽巷 2020-12-30 10:39

I have some CSV files with the same column headers. For example

File A

header1,header2,header3
one,two,three
four,five,six

File B

5条回答
  •  灰色年华
    2020-12-30 10:46

    This should work. It checks if the file being merged have matching headers. Would throw an exception otherwise. Exception handling (to close the streams etc.) has been left as an exercise.

    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 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();
    

提交回复
热议问题