0%

Java-多线程练习

两个10G的csv文件(t1.csv, t2.csv),两个csv文件里面表头为:id,name,grade

1
2
3
id:      String类型
name: String类型
grade: String类型

服务器内存只有1G,找出grade不为空,且grade数字大于90的数据,输出到当前目录下t3.csv文件中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;

/**
* @author: 尹丹
* @createDate: 2022/3/31
* @version: 1.0
*/
@AllArgsConstructor
public class Reader extends Thread {

private final String path;
private final BufferedWriter writer;

public void run() {
File inputFile = new File(path);
try {
BufferedReader reader = new BufferedReader(new FileReader(inputFile));
//跳过表头所在的行
reader.readLine();
//按行读取文件
while (reader.ready()) {
String line = reader.readLine();
String[] splitline = line.split(",");
double temp = Double.parseDouble(splitline[2]);
if (temp > 90) {
writer.write(line);
writer.newLine();
writer.flush();
}
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

/**
* @author: 尹丹
* @createDate: 2022/3/31
* @version: 1.0
*/
public class DataFilter {

public static void main(String[] args) {
File outputFile = new File("C:\\Users\\Yoon\\Desktop\\t3.csv");
try {
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(outputFile));
Thread t1 = new Reader("C:\\Users\\Yoon\\Desktop\\t1.csv", bufferedWriter);
Thread t2 = new Reader("C:\\Users\\Yoon\\Desktop\\t2.csv", bufferedWriter);
t1.start();
t2.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}