Java讀取寫出CSV

  • 26943
  • 0
  • Java
  • 2020-04-24

教你三種方法,利用 OpenCSV 、javaCSV 與 BufferedReader/Writer 進行csv的讀取與寫出!

 

方法一:BufferedReader/Writer

讀取

  try {
   InputStreamReader isr = new InputStreamReader(new FileInputStream("D://file_input.csv"));//檔案讀取路徑
   BufferedReader reader = new BufferedReader(isr);
   BufferedWriter bw = new BufferedWriter(new FileWriter("D://file_output.csv"));//檔案輸出路徑
   String line = null;
   while((line=reader.readLine())!=null){
      String item[] = line.split(",");
      /** 讀取 **/
      String  data1= item[0].trim();
      String  data2= item[1].trim();
      String  data3= item[2].trim();
      System.out.print(data1+"\t"+ data2+"\t"+ data3+"\n"); 

      //可自行變化成存入陣列或arrayList方便之後存取
            }
   bw.close();
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
   

也可以改成用陣列來接值!

String[] dataArray = {item[0].trim(),item[1].trim(),item[2].trim()};
System.out.print(dataArray[0]+"\t"+ dataArray[1]+"\t"+ dataArray[2]+"\n"); 

寫出

  try {
   InputStreamReader isr = new InputStreamReader(new FileInputStream("D://file_input.csv"));//檔案讀取路徑
   BufferedReader reader = new BufferedReader(isr);
   BufferedWriter bw = new BufferedWriter(new FileWriter("D://file_output.csv"));//檔案輸出路徑
   String line = null;
   while((line=reader.readLine())!=null){
                String item[] = line.split(",");

     /** 寫出 **/
    bw.newLine();//新起一行
   bw.write("data1,data2,data3");//寫到新檔案中

    //用陣列讀也可以,重點是中間記得加上"逗號",才可以順利分欄位
    //內容中如有逗號,記得換成別的,以免被csv誤會成分欄

   }
   bw.close();
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

用陣列讀也可以,點是中間記得加上"逗號",才可以順利分欄位!

/** 寫出 **/
String[] dataArray={data1,data2,data3};
bw.newLine();//新起一行
bw.write(data[0] +","+data[1] +","+ data[2]);//寫到新檔案中

內容中如有逗號,記得換成別的,以免被csv誤會成分欄

 

 

方法二:OpenCSV

請加入:opencsv.jar
http://www.java2s.com/Code/Jar/o/Downloadopencsv22jar.htm

讀取

1.使用Iterator方式讀

CSVReader reader = new CSVReader(new FileReader("File.csv")); 
String [] nextLine; 
while ((nextLine = reader.readNext()) != null) { 
    // nextLine[] is an array of values ​​from the line 
    System.out.println(nextLine[0] + nextLine[1] + "\n"); 
}

2. 使用List讀取

CSVReader reader = new CSVReader(new FileReader("File.csv")); 
List myEntries = reader.readAll();

寫出

CSVWriter writer = new CSVWriter(new FileWriter("File.csv"), '\t'); 
// feed in your array (or convert your data to an array) 
String[] entries1 = "data1,data2,data3". split(","); 
String[] entries2 = {"data1","data2","data3"]; 
writer.writeNext(entries1);
writer.writeNext(entries2);  
writer.close();

 

 

方法三:JavaCSV

請加入:javacsv.jar
http://www.java2s.com/Code/Jar/j/Downloadjavacsvjar.htm

讀取

try {
	CsvReader products = new CsvReader("File.csv");
	products.readHeaders();
	while (products.readRecord())
    {
		String data1= products.get("data id");
		String data2= products.get("data name");
		String data3= products.get("data price");	
		// perform program logic here
		System.out.println("id :" + data1);
	}
	products.close();
} catch (FileNotFoundException e) {
	e.printStackTrace();
} catch (IOException e) {
	e.printStackTrace();
}

寫出

String outputFile = "File_output.csv";
		// before we open the file check to see if it already exists
		boolean alreadyExists = new File(outputFile).exists();
		try {
			// use FileWriter constructor that specifies open for appending
			CsvWriter csvOutput = new CsvWriter(new FileWriter(outputFile, true), ',');
			
			// if the file didn't already exist then we need to write out the header line
			if (!alreadyExists){
				csvOutput.write("id");
				csvOutput.write("name");
				csvOutput.endRecord();
			}
			// else assume that the file already has the correct header line
			// write out a few records
			csvOutput.write("1");
			csvOutput.write("Bruce");
			csvOutput.endRecord();
			csvOutput.write("2");
			csvOutput.write("John");
			csvOutput.endRecord();
			csvOutput.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

 

 


同場加映:

Java讀取寫出檔案FileReader和FileWriter

 

 


參考來源:https://www.csvreader.com/java_csv_samples.php


 


人生美好~別浪費腦容量記程式碼 :- ) 

作者:CYL
出處:http://dotblogs.com.tw/cylcode
資料來源都會特別註明,有興趣都可查詢原出處,本站皆經過整理才分享,如有轉載請顯示出處及作者,感謝。