/*CSVDataMerge * CC BY This program can freely be used, edited, and redistributed for * non-commercial purposes. * @author James R. Schmidt * @email james.schmidt@ubfc.fr * Université Bourgogne Franche-Comté (UBFC)*/ package csvdatamerge; import java.io.*; import java.nio.file.Files; import java.nio.file.Paths; import java.util.stream.Collectors; import java.util.*; /**Merges together CSV files.*/ public class Main{ /**Combines CSV files. * @param args Not used*/ public static void main(String[] args){ File headFile = new File(System.getProperty("user.dir") +System.getProperty("file.separator")+"headers.csv"); String dir = System.getProperty("user.dir")+ System.getProperty("file.separator")+"data"; List fileList; Object[] fileNames = new Object[0]; try{ fileList = Files.walk(Paths.get(dir)) .filter(str -> str.getFileName().toString().endsWith("csv")) .collect(Collectors.toList()); if(fileList.isEmpty()){ fileList = Files.walk(Paths.get(dir)) .filter(str -> str.getFileName().toString().endsWith("txt")) .collect(Collectors.toList()); } fileNames = fileList.toArray(); } catch(IOException e1){ System.out.println("Error in finding data files."); } String[] headers = null; boolean headless = false; boolean decapitate = false; BufferedWriter writer; BufferedReader reader = null; String line; if(headFile.exists()){ try{ reader = new BufferedReader(new FileReader(headFile)); if((line=reader.readLine())!=null && !line.isEmpty()){ if(line.equals("no headers")){ headless = true; if((line=reader.readLine())!=null && !line.isEmpty()){ if(line.equals("leave blank")) decapitate = true; } } if(!decapitate) headers = line.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", -1); } reader.close(); } catch(IOException e2){ System.out.println("Problem with headers.csv file."); } } if(!headFile.exists()){ String firstFile = fileNames[0].toString(); try{ reader = new BufferedReader(new FileReader(firstFile)); if((line=reader.readLine())!=null && !line.isEmpty()) headers = line.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", -1); reader.close(); } catch(IOException e3){ System.out.println("Error in reading first file."); } String[] newHead; String nextFile; for(int f=1; f