huxiaoqing 发表于 2013-1-26 14:09:36

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)) {// sumaMap.put(arr, aMap.get(arr) + Integer.valueOf(arr) );} else {aMap.put(arr, Integer.valueOf(arr));}}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号需要排序
页: [1]
查看完整版本: IO基础