[英]How To Transfer specific Columns based on column name not by column index From One CSV File Into Another CSV Using Java
我正在編寫一個Java實用程序,我想將基於列名的特定列從一個CSV傳輸到另一個CSV文件而不是ArrayIndex 。
下面的程序在我根據數組索引選擇特定的列,但我只想根據列名過濾列時,運行得很好。
package be.ing.data;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.concurrent.TimeUnit;
public class ImportExportCSV{
public static void main(String[] args){
// Set your splitter, mostly "," or ";"
String csvFile = "C:/Data/input_file.csv";
String exportCSVFile = "C:/Data/output_file.csv";
// String csvSplitter = "\t";
String csvSplitter = ",";
String line = "";
BufferedReader br = null;
PrintWriter output = null;
Date date = new Date();
try {
// A buffered reader on the input file
br = new BufferedReader(new FileReader(csvFile));
// A writer to the output file
output = new PrintWriter(exportCSVFile, "UTF-8");
// Read line after line until EOF
int count = 0;
long startTime = System.nanoTime();
System.out.println("Start Execution Time : "+startTime);
while ((line = br.readLine()) != null) {
String[] cols = line.split(csvSplitter);
output.println(cols[0] + csvSplitter +
cols[20]);
count++;
}
System.out.println("Total Record count :"+count);
long endTime = System.nanoTime();
System.out.println("Completion Time : "+ (endTime-startTime));
System.out.println("Time in seconds"+ TimeUnit.SECONDS.convert(endTime, TimeUnit.NANOSECONDS));
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
您必須將String[] cols
轉換為List<String>
以獲得基於列名的列索引,然后使用該索引訪問csv文件每一行的值:
例如,如果要為csv文件的每一行打印"myColumnName"
列的值:
String[] cols = line.split(csvSplitter);
List<String> columns = Arrays.asList(cols);
System.out.println(cols[columns.indexOf("myColumnName")]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.