读取CSV文件时如何分隔换行?

How to delimit new line when reading CSV file?

提问人:Diego 提问时间:8/23/2020 最后编辑:Diego 更新时间:8/24/2020 访问量:575

问:

我正在尝试读取一个文件,其中每行都有数据成员,用逗号分隔,用于填充对象的数据成员,我尝试使用正则表达式“|”符号来分隔“”和“\n”以及“\r”以到达新行。但是,在读取第一行后,第二行的第一个数据成员不会立即被读取,而是预先读取一个“”字符。我是否使用了错误的正则表达式符号?还是我没有使用正确的方法?我读到有很多方法可以解决这个问题,并选择使用扫描仪,因为看起来最简单,使用缓冲区阅读器似乎非常令人困惑,因为它似乎返回数组而不是单个字符串和整数,这是我试图得到的。

CSV 文件如下所示

stringA,stringB,stringC,1,2,3
stringD,stringE,stringF,4,5,6
stringG,stringH,stringI,7,8,9

我的代码看起来像这样

//In list class

public void load() throws FileNotFoundException
    {
        Scanner input = new Scanner(new FileReader("a_file.csv"));

        object to_add; //To be added to the list

        input.useDelimiter(",|\\n|\\r");

        while (input.hasNext())
        {
            String n = input.next(); //After the first loop run, this data gets the value ""
            String l = input.next(); //During this second run, this member gets the data that n was supposed to get, "stringD"
            String d = input.next(); //This one gets "stringE"
            int a = input.nextInt(); //And this one tries to get "stringF", which makes it crash
            int c = input.nextInt();

            to_add = new object(n, l, d, a, b, c); //Calling copy constructor to populate data members

            insert(to_add); //Inserting object to the list
        }

        input.close();
    }
Java CSV 文件 java.util.scanner 分隔符

评论

1赞 Hasitha Jayawardana 8/23/2020
您可以使用 OpenCSV。查看此教程
0赞 MarcoLucidi 8/23/2020
输入文件中没有要扫描的有效整数,当前示例文件将始终失败input.nextInt()
0赞 Diego 8/24/2020
那些应该代表整数,现在编辑
0赞 digitebs 8/24/2020
nextLine然后拆分?

答:

1赞 Onur Baştürk 8/24/2020 #1

使用 Apache Commons CSV。这是用户指南 https://commons.apache.org/proper/commons-csv/user-guide.html

0赞 Hasitha Jayawardana 8/24/2020 #2

你可以用OpenCSV来做到这一点,这里有一个如何使用这个库的教程。您可以从 Maven 存储库下载该库。

所以下面是你需要做的代码,

Reader reader = Files.newBufferedReader(Paths.get("path/to/csvfile.csv"));
CSVReader csvReader = new CSVReader(reader);
List<String[]> dataList = new ArrayList<>();
dataList = csvReader.readAll();

reader.close();
csvReader.close();

Object to_add;

for (String[] rowData : dataList) {
    String textOne = rowData[0];
    String textTwo = rowData[1];
    String textThree = rowData[2];
    int numberOne = Integer.parseInt(rowData[3]);
    int numberTwo = Integer.parseInt(rowData[4]);
    int numberThree = Integer.parseInt(rowData[5]);

    to_add = new Object(textOne, textTwo, textThree, numberOne, numberTwo, numberThree);

    insert(to_add);
}