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;
}
} |
|