使用java处理多个csv行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用java处理多个csv行相关的知识,希望对你有一定的参考价值。
我有一个文件,我在一个新的行中写了一个csv值。结果看起来像那样:
Hello;kind;world
Mister;John;Doe
等等。我也有一个带有构造函数的类,它取每个部分值,例如: John
作为参数:
public MyClass(String first, String second, String third) {}
结果我需要一个Collection<MyClass>
。处理I迭代每个csv行,然后在特定行值的内部for循环后,用;
分割它:
Collection<String> csvLines = Files.readAllLines(pathToMyFile);
for (String csvLine : csvLines) {
String[] csvLineSplitted = csvLine.split(";");
for (int i = 0; i < csvLineSplitted.length; i++) {
String value = scvLineSPlitted[i]; //This can be the above mentioned value, e.g. 'John'
}
}
如何使用每个特定参数创建MyClass
类型的对象,然后将其存储在Collection<MyCLass> result
中?
答案
您也可以使用Streams实现此目的:
private class MyClass {
private String first;
private String second;
MyClass(String first, String second) {
this.first = first;
this.second = second;
}
@Override
public String toString() {
return "MyClass [first=" + first + ", second=" + second + "]";
}
}
List<MyClass> list = Files.lines(path)
.map(line -> line.split(";"))
.map(splittedLine -> new MyClass(splittedLine[0], splittedLine[1]))
.collect(Collectors.toList());
System.out.println(list);
如果您有两列以上的内容,只需修改第二个地图运算符即可满足您的要求
另一答案
只需定义一个类:
public class MyClass {
private String param1;
private String param2;
public MyClass(String param1, String param2) {
this.param1 = param1;
this.param2 = param2;
}
// getters and setters
}
然后在迭代CSV数据时使用该类:
Collection<String> csvLines = Files.readAllLines(pathToMyFile);
List<MyClass> list = new ArrayList<>();
for (String csvLine : csvLines) {
String[] csvLineSplitted = csvLine.split(";");
MyClass node = new MyClass(csvLineSplitted[0], csvLineSplitted[1]);
list.add(node);
}
请注意,我假设您的数据只有两列。如果实际数据有多个列,那么在for循环中迭代的方法更有意义。
以上是关于使用java处理多个csv行的主要内容,如果未能解决你的问题,请参考以下文章
片段(Java) | 机试题+算法思路+考点+代码解析 2023
问题一:java怎样限制导出的csv文件大小,csv文件导出里面行数大于5000条则分为多个csv文件。