您的位置:首页 > 编程语言

【代码练习】学生成绩排名--涉及IO流和集合

2015-09-15 12:32 267 查看
题目:文件test.txt装有三个文件地址a.txt、b.txt、c.txt,分别装有三个学生的成绩,一共九个学生成绩,将九个学生成绩汇总排名并写入到一个新文件。

test.txt位于D盘根目录。

test.txt文件内容
D:\testdir\a\a.txt

D:\1\b.txt

D:\c.txt

a.txt文件内容
Frank=90

Zhangsan=70

Bob=60

b.txt文件内容
Ally=78

Zoo=67

Pull=44

c.txt文件内容
Till=43

Dog=88

Wofu=99

思路:
1、使用IO流读取test.txt文件里的三个文件地址,并将其打开。

2、分别读取三个文件里的学生数据并将其存入到一个集合中,将集合进行排序。

3、将集合数据写入到新文件。

代码如下

package test;
import java.io.*;
import java.util.*;

public class test3 {
public static void main(String[] args ) throws IOException{
File dir =new File("d:\\test.txt");
chengjipaiming(dir);
}
public static void chengjipaiming(File dir) throws IOException{
//建立test.txt的缓存流
BufferedReader br = new BufferedReader(new FileReader(dir));
//通过读取test.txt文件里的数据,分别建立文件a.txt、b.txt、c.txt的缓存流
BufferedReader a = new BufferedReader(new FileReader(br.readLine()));
BufferedReader b = new BufferedReader(new FileReader(br.readLine()));
BufferedReader c = new BufferedReader(new FileReader(br.readLine()));
//新建一个TreeMap集合,存储学生姓名和成绩
TreeMap<String, String> sort  = new TreeMap<String,String>();
//分别将a.txt、b.txt、c.txt里的数据存储到sort集合中
getInfo(a, sort);
getInfo(b, sort);
getInfo(c, sort);
//将sort集合进行排序并将数据写入到新的文件test2.txt
sopMap(sort);
}
public static void getInfo(BufferedReader a,TreeMap<String, String> sort) throws IOException{
//新建字符串line存储缓存流中的学生数据
String line =null;
//通过readline方法将数据传到line中
while((line=a.readLine())!=null){
//line通过split方法将数据分为学生姓名和成绩
String[] args = line.split("=");
//分别将姓名和成绩存入集合sort
sort.put(args[0], args[1]);
}
}
public static void sopMap(TreeMap<String, String> sort) throws IOException{
//将sort的Entry的数据存储到List集合中
List<Map.Entry<String, String>> le = new ArrayList<Map.Entry<String,String>>(sort.entrySet());
//通过Collections里的排序方法sort将List集合里的Entry按照Entry.getValue(即学生成绩)进行排序
Collections.sort(le,new Comparator<Map.Entry<String,String>>() {
public int compare(Entry<String, String> o1,
Entry<String, String> o2) {
//降序排序
return o2.getValue().compareTo(o1.getValue());
}
});
//新建文件test2.txt及其bw缓存流
File f = new File("d:\\test2.txt");
BufferedWriter bw = new BufferedWriter(new FileWriter(f));
//通过for循环将le集合中的sort集合中Value(即学生成绩)取出
for(Map.Entry<String, String> me :le){
//bw缓存流将学生姓名和成绩写入到test2.txt文件中
bw.write(me.getKey()+"    "+me.getValue());
//将学生数据分行
bw.newLine();
//刷新流
bw.flush();
}
//将bw缓存流关闭
bw.close();
}
}


结果为:

Wofu 99

Frank 90

Dog 88

Ally 78

Zhangsan 70

Zoo 67

Bob 60

Pull 44

Till 43
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  io流 代码