使用JAVA从CSV文件中读取列

时间:2013-11-12 14:31:51

标签: 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。任何人都可以帮我修复此代码以打印整个第一列。感谢。

4 个答案:

答案 0 :(得分:18)

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

代码:

public static void main(String[] args) throws Exception {

    File file = new File("test.csv");

    List<String> 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

答案 1 :(得分:16)

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

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

除此之外:使用OpenCSV等CSV库已解决此问题。以下是reading and writing CSV文件的示例

答案 2 :(得分:16)

如果你有像

这样的csv文件,则用逗号分割不会一直有效
"Name" , "Job" , "Address"
"Pratiyush, Singh" , "Teacher" , "Berlin, Germany"

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

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

答案 3 :(得分:3)

您没有更改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。上面的代码设置了行,然后检查它是否为空。