Java8如何读取一个大数据的csv文件,并生成一个Dto类型的List
时间: 2024-05-13 16:17:29 浏览: 205
特定大数据量的CSV文件的读取
Java 8中使用流(Stream)和Lambda表达式可以很方便地读取大型CSV文件并生成DTO类型的列表。你可以按照以下步骤进行操作:
1. 使用Java 8自带的Files类读取CSV文件,并将其转换为流(Stream)。
```java
Stream<String> lines = Files.lines(Paths.get("file.csv"));
```
2. 使用流(Stream)中的skip()方法跳过第一行(表头)。
```java
Stream<String> lines = Files.lines(Paths.get("file.csv")).skip(1);
```
3. 使用流(Stream)中的map()方法将每一行数据转换为DTO对象。
```java
List<MyDto> dtos = lines.map(line -> {
String[] fields = line.split(",");
MyDto dto = new MyDto();
dto.setField1(fields[0]);
dto.setField2(fields[1]);
//...
return dto;
}).collect(Collectors.toList());
```
4. 关闭流(Stream)。
```java
lines.close();
```
完整代码示例:
```java
public class CsvReader {
public static void main(String[] args) throws IOException {
Stream<String> lines = Files.lines(Paths.get("file.csv")).skip(1);
List<MyDto> dtos = lines.map(line -> {
String[] fields = line.split(",");
MyDto dto = new MyDto();
dto.setField1(fields[0]);
dto.setField2(fields[1]);
//...
return dto;
}).collect(Collectors.toList());
lines.close();
System.out.println(dtos);
}
}
class MyDto {
private String field1;
private String field2;
//...
public String getField1() {
return field1;
}
public void setField1(String field1) {
this.field1 = field1;
}
public String getField2() {
return field2;
}
public void setField2(String field2) {
this.field2 = field2;
}
}
```
阅读全文