A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Justfeeling 中级黑马   /  2014-9-18 13:34  /  750 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

11.IO集合的综合
  提供一个文本文件,文件中保存的是姓名和成绩
  读取文件,对姓名和成绩按照成绩高低排序
  将排序后的结果,保存到另一个文件中
  数据中姓名,成绩可能重复

  对于文件有要求,提供你的文件 studentscore.txt 排序后另存的文件sortstudentscore.txt     如:abc.txt   排序后的文件名为: sortabc.txt

public class ScoreSort {
        public static void main(String[] args) throws IOException{
                //定义集合对象,存储文本中的姓名和成绩
                List<Student> list = new ArrayList<Student>();
                //定义File对象,文件进行封装
                File file = new File("c:\\student.txt");
                //定义字符输入流,读取源文件
                BufferedReader bfr = new BufferedReader(new FileReader(file));
                String line = null;
                while((line = bfr.readLine())!=null){
                        //字符串处理,切割,姓名和成绩
                        line = line.trim();//去除空格
                        String[] str = line.split(" +");
                        //姓名str[0],成绩str[1]转成int,存储到集合
                        list.add(new Student(str[0],Integer.parseInt(str[1])));
                }
            //集合排序了,Collections工具类中的方法 sort,排序的是自定义对象
                Collections.sort(list,new MyComparatorStudent());
System.out.println(list);//排序后的list

                //将排序后的内存,存储到新的文本文件中,要求文件名前面加sort
                //获取源文件的文件名
                String filename = file.getName();
                filename = "sort"+filename;       
                //获取源文件的父路径
                String parent = file.getParent();
                //父路径和文件名组成File对象,传递给字符输出流写文件
                File newFile = new File(parent,filename);
                BufferedWriter bfw = new BufferedWriter(new FileWriter(newFile));
                for(Student s : list){
                        bfw.write(s.getName()+" "+s.getScore());
                        bfw.newLine();
                        bfw.flush();
                }
                bfr.close();
                bfw.close();
        }
}
public class MyComparatorStudent implements java.util.Comparator<Student>{
        public int compare(Student s1,Student s2){
                int num=s1.getScore()-s2.getScore();
                return num==0?s1.getName().compareTo(s2.getName()):num;
        }
}
public class Student {
        private String name;
        private int score;
        public Student(String name, int score) {
                super();
                this.name = name;
                this.score = score;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public int getScore() {
                return score;
        }
        public void setScore(int score) {
                this.score = score;
        }       

        public String toString() {
                return name + "..." + score;
        }       
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马