Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JAVA从CSV文件读取列_Java_Csv - Fatal编程技术网

使用JAVA从CSV文件读取列

使用JAVA从CSV文件读取列,java,csv,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 {

您好,我正在尝试读取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):


我试图打印csv中的第一列,但我得到的输出只是无限循环中的
a
。谁能帮我修改一下这个代码来打印整个第一列。谢谢。

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

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

旁白:这个问题已经用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"));
      while((line = br.readLine()) != null){
           String[] b = line.split(splitBy);
           System.out.println(b[0]);
      }
      br.close();

  }
}
readLine返回每一行,只有在没有剩余内容时才返回null。上述代码设置行,然后检查它是否为空。

如果您正在使用,您可能需要使用,例如:

❍ 代码:


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

"Name" , "Job" , "Address"
"Pratiyush, Singh" , "Teacher" , "Berlin, Germany"
因此,我建议使用API:

Reader in=newfilereader(“input1.csv”);
Iterable records=CSVFormat.EXCEL.parse(in);
用于(CSVRecord记录:记录){
System.out.println(record.get(0));
}

您不需要在循环中重新分配
,因此代码会循环,直到行为
,这将永远不会发生。这只是一个提示,希望能帮助您度过我们中一些人所经历的一些痛苦和痛苦。不要为csv编写自定义解析器和编写器。。。当然这看起来很简单,每一行都是一行,每一个逗号都是一列。这是真的,直到它不是!看看外面的图书馆。它将消除维护正确csv格式的痛苦。对于记录,它是Java,而不是Java。如果我想读取整行,该怎么做?这样就可以了。该行被读入变量
line
List lines=Files.readAllLines()
good one+1当列包含commas@cricket_007为什么?他正在和我分手comma@Sha如果您不明白仅使用任意逗号拆分不是解决方案,那么您显然从未使用过在单个列中包含数据列表的CSV。我理解问题本身只要求第一列,并且给出的示例数据本身没有额外的逗号。然而,人们来到这里是为了“用Java解析CSV”,答案是flawed@cricket_007哦,你是说一列中的逗号值吗,那么我误解了这应该是公认的答案
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
"Name" , "Job" , "Address"
"Pratiyush, Singh" , "Teacher" , "Berlin, Germany"
    Reader in = new FileReader("input1.csv");
    Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(in);
    for (CSVRecord record : records) {
      System.out.println(record.get(0));
    }