package com.test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class StudentInfo implements Comparable<StudentInfo>
{
private String id; //学号
private String name; //学生姓名
private String birthday; //出生日期
private String score; //分数
public String getId()
{
return id;
}
public void setId(String id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getBirthday()
{
return birthday;
}
public void setBirthday(String birthday)
{
this.birthday = birthday;
}
public String getScore()
{
return score;
}
public void setScore(String score)
{
this.score = score;
}
/**
*
* {排序方法}
*
* @param objStu
* @return
* @author:LJ
*/
public int compareTo(StudentInfo objStu)
{
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
//得分相同时按照出生日期升序排序
if (this.score.equals(objStu.getScore()))
{
//格式化日期字符串
Date date1 = null;
try
{
date1 = dateFormat.parse(this.birthday);
}
catch (ParseException e1)
{
e1.printStackTrace();
}
Date date2 = null;
try
{
date2 = dateFormat.parse(objStu.getBirthday());
}
catch (ParseException e2)
{
e2.printStackTrace();
}
//出生日期升序排序
return date1.compareTo(date2);
}
//得分从高到低排序
return objStu.getScore().compareTo(this.score);
}
}
2.读写文件类StudentFile.java
package com.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class StudentFile
{
/**
*
* {根据路径读取学生文件信息}
*
* @param path
* @return List<StudentInfo>
* @throws Exception
* @author:LJ
*/
public List<StudentInfo> readFile(String path) throws Exception
{
List<StudentInfo> studentList = new ArrayList<StudentInfo>();
BufferedReader br = null;
try
{
br = new BufferedReader(new FileReader(path));
String line = null;
StudentInfo student = null;
while ((line = br.readLine()) != null)
{
student = new StudentInfo();
//将字符串分割成字符串数组
String[] studentStr = line.split(",");
student.setId(studentStr[0]);
student.setName(studentStr[1]);
student.setBirthday(studentStr[2]);
student.setScore(studentStr[3]);
studentList.add(student);
}
}
catch (FileNotFoundException e)
{
throw new Exception("源文件未找到", e);
}
catch (IOException e)
{
throw new Exception("读文件异常.", e);
}
finally
{//资源关闭
if (br != null)
{
try
{
br.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
return studentList;
}
/**
*
* {将学生信息写入目标文件}
*
* @param studentList
* @param dstPath
* @throws Exception
* @author:LJ
*/
public void writeFile(List<StudentInfo> studentList, String dstPath) throws Exception
{
BufferedWriter bw = null;
try
{
bw = new BufferedWriter(new FileWriter(dstPath));
if (studentList != null && !studentList.isEmpty())
{
for(StudentInfo stu:studentList)
{
bw.write(stu.getId()+","+stu.getName()+","+stu.getBirthday()+","+stu.getScore());
bw.newLine();//换行
}
}
bw.flush();//强制输出缓冲区的内容,避免数据缓存,造成文件写入不完整的情况。
}
catch (IOException e)
{
throw new Exception("目标文件未找到", e);
}
finally
{ //资源关闭
if (bw != null)
{
try
{
bw.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
}
3.编写main方法
package com.test;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test
{
/**
* {main方法}
*
* @param args
* @author:LJ
* @throws Exception
*/
public static void main(String[] args) throws Exception
{
String srcPath = "C:" + File.separator + "test" + File.separator + "student.txt";
String dstPath = "C:" + File.separator + "test" + File.separator + "result.txt";
//从源文件读取学生信息
StudentFile fileStu = new StudentFile();
List<StudentInfo> studentList = fileStu.readFile(srcPath);
//临时数组,作排序用
List<StudentInfo> tempList = new ArrayList<StudentInfo>();
for (int i = studentList.size()-1; i > 0; i--)
{
//将学生信息存入临时数组,并从原数组中删除,行标题除外
tempList.add(studentList.get(i));
studentList.remove(i);
}
//对临时数组进行排序
Collections.sort(tempList);
for (int i=0,n = tempList.size(); i < n; i++)
{
//将排序后数组追加到原数组中
studentList.add(tempList.get(i));
}
//将学生信息写入目标文件
fileStu.writeFile(studentList, dstPath);
}
}