`
huxiaoqing
  • 浏览: 5263 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

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号需要排序
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics