文件Source中的数据格式为:
A:52
B:23
C:44
D:88
H:99
C:22
C:33
E:11
问题:
1、从Source中读取数据,并求和,打印到控制台,格式为:
A:52
B:23
C:99
D:88
H:99
E:11
2、排序打印到控制台
E:11
B:23
A:52
D:88
C:99
H:99
上面是我写的代码
但是还有个问题,如果是特别大的文件该怎么办呢?
比如:两个30G的文件,文件里面一行一个QQ号,现在需要把两个文件合并成一个文件,并且QQ号需要排序
A:52
B:23
C:44
D:88
H:99
C:22
C:33
E:11
问题:
1、从Source中读取数据,并求和,打印到控制台,格式为:
A:52
B:23
C:99
D:88
H:99
E:11
2、排序打印到控制台
E:11
B:23
A:52
D:88
C:99
H:99
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Manager {
private BufferedReader br;
private BufferedWriter bw;
private List<Student> students = new ArrayList<Student>();
public void read(){
try {
br = new BufferedReader(new FileReader("Source"));
String str = "";
String [] arr;
Map<String, Integer> aMap = new HashMap<String, Integer>();
while ((str = br.readLine()) != null) {
arr = str.split(":");
if (aMap.containsKey(arr[Student.INDEX_0])) {// sum
aMap.put(arr[Student.INDEX_0], aMap.get(arr[Student.INDEX_0]) + Integer.valueOf(arr[Student.INDEX_1]) );
} else {
aMap.put(arr[Student.INDEX_0], Integer.valueOf(arr[Student.INDEX_1]));
}
}
for (String key : aMap.keySet()) {
students.add(new Student(key, aMap.get(key)));
System.out.println(new Student(key, aMap.get(key)).toString());
}
System.out.println("=====排序后======");
this.sort();
for (Student st : students) {
System.out.println(st.toString());
}
br.close();// 关闭读取流
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
// 排序
private void sort() {
Collections.sort(students);
}
public void write(){
try {
bw = new BufferedWriter(new FileWriter("SumSource"));
for (Student st : students) {
bw.write(st.toString(), 0, st.toString().length());
bw.newLine();
}
bw.close();//关闭写入流
} catch (IOException e) {
e.printStackTrace();
}
}
private static class Student implements Comparable<Student>{
private String name;
private Integer score;
public static int INDEX_0 = 0;
public static int INDEX_1 = 1;
Student(String name, Integer sore){
this.name = name;
this.score = sore;
}
public Integer getScore(){
return this.score;
}
// 重写
public String toString(){
return this.name + ":" + this.score ;
}
public int compareTo(Student st){
return this.getScore() - st.getScore();
}
}
public static void main(String [] args) {
Manager m = new Manager();
m.read();
m.write();
}
}
上面是我写的代码
但是还有个问题,如果是特别大的文件该怎么办呢?
比如:两个30G的文件,文件里面一行一个QQ号,现在需要把两个文件合并成一个文件,并且QQ号需要排序