IO基础

文件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


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号需要排序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值