有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用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) 个答案

  1. # 1 楼答案

    如果您正在使用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
    
  2. # 2 楼答案

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

  3. # 3 楼答案

    用逗号分割并不是一直有效的,例如,如果你有csv文件,比如

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

    因此,我建议使用Apache Commons CSVAPI:

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

    在循环中连续读取输入,以便为变量line分配除初始值以外的值

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

    旁白:这个问题已经用CSV库解决了,比如OpenCSV。以下是reading and writingCSV文件的示例