Search code examples
javacsvexport-to-csvfilewriter

Java append new column to csv file


I want to calculate some column data and write it to csv file as column. Then after calculating other column of data I want to append it to same file but as new column.

Here is what I did:

try {
    FileWriter writer = new FileWriter(OUT_FILE_PATH, true);
    for (int i=0; i<data.size(); i++) {
        writer.append(String.valueOf(data.get(i)));
        writer.append(",");
        writer.append("\n");
    }
    writer.flush();
    writer.close();
} catch (Exception e) {} 

Result - It appends the new column below the first column, so I have single long column.

Thanks,


Solution

  • You will have to read your file (line by line) and then insert the new column to every line. Here's a solution using BufferedReader and BufferedWriter

    public void addColumn(String path,String fileName) throws IOException{
        BufferedReader br=null;
        BufferedWriter bw=null;
        final String lineSep=System.getProperty("line.separator");
    
        try {
            File file = new File(path, fileName);
            File file2 = new File(path, fileName+".1");//so the
                        //names don't conflict or just use different folders
    
            br = new BufferedReader(new InputStreamReader(new FileInputStream(file))) ;
            bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file2)));
            String line = null;
                        int i=0;
            for ( line = br.readLine(); line != null; line = br.readLine(),i++)
            {               
    
                String addedColumn = String.valueOf(data.get(i));
                bw.write(line+addedColumn+lineSep);
        }
    
        }catch(Exception e){
            System.out.println(e);
        }finally  {
            if(br!=null)
                br.close();
            if(bw!=null)
                bw.close();
        }
    
    }