使用JAVA从CSV文件中读取列

嗨,我正在尝试在JAVA中读取名为test.csv的CSV文件。 以下是我的代码:

 import java.io.BufferedReader; import java.io.FileReader; public class InsertValuesIntoTestDb { @SuppressWarnings("rawtypes") public static void main(String[] args) throws Exception { String splitBy = ","; BufferedReader br = new BufferedReader(new FileReader("test.csv")); String line = br.readLine(); while(line!=null){ String[] b = line.split(splitBy); System.out.println(b[0]); } br.close(); } } 

这是我的CSV文件(test.csv):

 a,f,w,b,numinst,af,ub 1RW,800,64,22,1,48:2,true 1RW,800,16,39,1,48:2,true 1RW,800,640,330,1,48:2,true 1RW,800,40,124,1,48:2,true 1RW,800,32,104,1,48:2,true 1RW,800,8,104,1,48:2,true 1R1W,800,65536,39,1,96:96,true 1R1W,800,2048,39,1,96:96,true 1R1W,800,8192,39,1,48:48,true 

我试图打印csv中的第一列,但我得到的输出只是a无限循环。 任何人都可以帮我修复此代码以打印整个第一列。 谢谢。

在循环内连续读取输入,以便为变量line分配一个不是初始值的值

 while ((line = br.readLine()) !=null) { ... } 

旁白:使用诸如OpenCSV之类的 CSV库已经解决了这个问题。 以下是读取和写入 CSV文件的示例

如果您使用的是Java 7+ ,则可能需要使用NIO.2 ,例如:

代码:

 public static void main(String[] args) throws Exception { File file = new File("test.csv"); List lines = Files.readAllLines(file.toPath(), StandardCharsets.UTF_8); for (String line : lines) { String[] array = line.split(",", -1); System.out.println(array[0]); } } 

输出:

 a 1RW 1RW 1RW 1RW 1RW 1RW 1R1W 1R1W 1R1W 

如果您有csv文件,则逗号分割不会一直有效

 "Name" , "Job" , "Address" "Pratiyush, Singh" , "Teacher" , "Berlin, Germany" 

所以,我建议使用Apache Commons CSV API:

  Reader in = new FileReader("input1.csv"); Iterable records = CSVFormat.EXCEL.parse(in); for (CSVRecord record : records) { System.out.println(record.get(0)); } 

您没有更改line的值。 它应该是这样的。

 import java.io.BufferedReader; import java.io.FileReader; public class InsertValuesIntoTestDb { @SuppressWarnings("rawtypes") public static void main(String[] args) throws Exception { String splitBy = ","; BufferedReader br = new BufferedReader(new FileReader("test.csv")); while((line = br.readLine()) != null){ String[] b = line.split(splitBy); System.out.println(b[0]); } br.close(); } } 

readLine返回每一行,只有在没有任何内容时才返回null。 上面的代码设置了行,然后检查它是否为null。