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


题目:文件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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值