CSV写入文件追加新的内容,文件编码处理

在编码的过程中,需要写入CSV格式的文件,在已经写入的文件里面继续追加内容,

但是写入的文件总是编码不一致导致处理乱码问题,经过一番寻找,终于找到答案,希望对大家有帮助

demo代码如下:

      String[] header = {"标题","内容","显示"};
      String[] header1 = {"商汇","打怪兽","商汇"};
       try{


           CsvWriter cw = new CsvWriter("E:/b.csv",',',Charset.forName("GBK"));
           cw.writeRecord(header);
           cw.writeRecord(header1);
           cw.close();

           //追加文件内容
           String[] header2 = {"商汇1","打怪兽1","商汇1"};
           String[] header3 = {"商汇2","打怪兽2","商汇2"};


           BufferedWriter out = new BufferedWriter(new 

           OutputStreamWriter(new FileOutputStream("E:/b.csv",true),"GBK"),1024);
           cw = new CsvWriter(out,',');
           cw.writeRecord(header2);
           cw.writeRecord(header3);
           cw.close();

package cn.howso.deeplan.son.feeder.util;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Date;

import com.csvreader.CsvReader;
import com.csvreader.CsvWriter;

public class ReadandwriteCsv {
    public static void main(String[] args) throws IOException { 
    	Date datestart =new Date();
    	System.out.println(datestart+"******");
        String [] str = {"city_id","city_name","city_pid","level"};
        int [] needs = {1,2,3,4,5,6};
        String inString = "";
        String tmpString = "";
        File inFile = new File("E://srr//plan_ott_data_nanjing.csv"); // 读取的CSV文件
        File outFile =  new File("E://srr//plan_ott_data_nanjing_srr.csv");//输出的CSV文
        try {
            BufferedReader reader = new BufferedReader(new FileReader(inFile));
            CsvReader creader = new CsvReader(reader, ',');
            CsvWriter cwriter =new CsvWriter(new BufferedWriter(new FileWriter(outFile)),',');
            System.out.println("开始读取"+"******");
            String datatime ="";
            while(creader.readRecord()){
                inString = creader.getRawRecord();//读取一行数据
                
                if(!datatime.equals(inString.split(",")[0].substring(0, 8))){
                	datatime=inString.split(",")[0].substring(0, 8);
                	outFile= new File("E://srr//plan_ott_data_nanjing_"+datatime+".csv");
					cwriter.flush();// 刷新数据
					cwriter.close();
					 BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("E://srr//plan_ott_data_nanjing_"+datatime+".csv",true),"GBK"),1024);
					 cwriter = new CsvWriter(out,',');
            		System.out.println("创建一个新文件,行数"+creader.getCurrentRecord());
                }
               // System.out.println(creader.getCurrentRecord()+"::::::"+rowNum);
               
                for(int i = 0;i < str.length;i++){
                	inString = inString.replace(str[i], "," + str[i] + ",");
                	tmpString=inString;
//                	for(int j = 0;j < needs.length;j++){
//                		tmpString+=inString.split(",")[needs[j]];
//                	}
                }
                //第一个参数表示要写入的字符串数组,每一个元素占一个单元格,第二个参数为true时表示写完数据后自动换行
            cwriter.writeRecord(tmpString.split(","), true);
            //注意,此时再用cwriter.write(inString)方法写入数据将会看到只往第一个单元格写入了数据,“,”没起到调到下一个单元格的作用
            //如果用cwriter.write(String str)方法来写数据,则要用cwriter.endRecord()方法来实现换行
            //cwriter.endRecord();//换行
            cwriter.flush();//刷新数据
            }  
            creader.close();
            cwriter.close();
            Date datesend =new Date();
        	System.out.println(datesend+"******");
        	System.out.println("耗时:"+(datesend.getTime()-datestart.getTime())/60000);
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
    }
}


       }catch (Exception ex){
           ex.printStackTrace();

       }



猜你喜欢

转载自blog.csdn.net/u010251897/article/details/80118347