黑马程序员技术交流社区

标题: File类总结 [打印本页]

作者: Justfeeling    时间: 2014-9-18 13:34
标题: File类总结
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;
        }       
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2