【代码练习】学生成绩排名--涉及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、将集合数据写入到新文件。
代码如下
结果为:
Wofu 99
Frank 90
Dog 88
Ally 78
Zhangsan 70
Zoo 67
Bob 60
Pull 44
Till 43
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
相关文章推荐
- android 代码实现控件之间的间距
- [Android]在代码里运行另一个程序的方法
- 肯特·贝克:改变人生的代码整理魔法
- 网页恶意代码的预防
- 高手写的Tracer-Flash代码调试类代码下载
- CSS代码缩写技巧
- 非主流Q-zOne代码代码搜集第1/2页
- CreateWeb.vbs 代码
- Lua中编译执行代码相关的函数详解
- 更有效率的css代码编写第1/3页
- 代码中到底应不应当写注释?
- SQL语言查询基础:连接查询 联合查询 代码
- 论坛头像随机变换代码
- .NET 常用功能和代码小结
- C#实现压缩HTML代码的方法
- asp编程中常用的javascript辅助代码第1/2页
- C#超实用代码段合集
- Javascript代码在页面加载时的执行顺序介绍
- JS实现图片无间断滚动代码汇总
- 我的论坛源代码(二)