java读取文件内容并计算后格式输出!
从文件student读入学生成绩,文件格式为学号姓名课程1课程2课程3000XXX100100100计算并输出所有学生的平均成绩,按从高到低排序,输出格式为学号姓名平均成...
从文件student读入学生成绩,文件格式为
学号 姓名 课程1 课程2 课程3
000 XXX 100 100 100
计算并输出所有学生的平均成绩,按从高到低排序,输出格式为
学号 姓名 平均成绩
000 XXX 100 展开
学号 姓名 课程1 课程2 课程3
000 XXX 100 100 100
计算并输出所有学生的平均成绩,按从高到低排序,输出格式为
学号 姓名 平均成绩
000 XXX 100 展开
2个回答
展开全部
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class TestFile {
private static File file = new File("student");
/**
* 从文件student读入学生成绩,文件格式为
*
* 000 XXX 100 100 100
*
*/
public static void read() throws Exception {
List<Student> stus = new ArrayList<Student>();
// 读文件操作
BufferedReader fr = new BufferedReader(new FileReader(file));
String line = null;
// 读取每一行,如果结束了,line会为空
while ((line = fr.readLine()) != null && line.trim().length() > 0) {
// 每一行创建一个Student对象,并存入数组中
stus.add(new Student(line));
}
fr.close();
// 排序这个List
Collections.sort(stus);
// 依次打印每个学生
for (Student stu : stus) {
System.out.println(stu);
}
}
/**
*
* 赠送的方法
*
* 随机生成文件,length代表要生成几个学生
*
* lenth必须小于1000,未做判断
*
* @param length
*/
public static void randomFile(int length) throws IOException {
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file);
StringBuffer sb = new StringBuffer();
Random rd = new Random();
for (int i = 0; i < length; i++) {
// 清空StringBuffer
sb.delete(0, sb.length());
if (i < 10) {
sb.append("00");
} else if (i < 100) {
sb.append("0");
}
sb.append(i + " ");
sb.append("name" + i + " ");
sb.append(rd.nextInt(100) + " ");
sb.append(rd.nextInt(100) + " ");
sb.append(rd.nextInt(100) + "\r\n");
fw.write(sb.toString());
}
fw.close();
}
public static void main(String[] args) throws Exception {
read();
}
/**
* 定义一个学生类,简单定义一个成员为String数组,依次代表
*
* 学号 姓名 课程1 课程2 课程3
*
* 实现Comparable接口,是为了排序所用
*
*/
private static class Student implements Comparable<Student> {
private String[] str;
public Student(String line) {
// 这里应该进行错误判断
// 比如成绩是否是整型等
str = line.trim().split(" ");
}
// 获取学生平均成绩
public double getAve() {
double c1 = Double.parseDouble(str[2]);
double c2 = Double.parseDouble(str[3]);
double c3 = Double.parseDouble(str[4]);
return (c1 + c2 + c3) / 3;
}
// 实现该方法,如果小于返回-1,大于返回1,相等返回0
public int compareTo(Student o) {
if (this.getAve() > o.getAve()) {
return 1;
} else if (this.getAve() < o.getAve()) {
return -1;
} else {
return 0;
}
}
// 重写toString方法,用于打印
public String toString() {
return str[0] + "\t" + str[1] + "\t" + this.getAve();
}
}
}
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class TestFile {
private static File file = new File("student");
/**
* 从文件student读入学生成绩,文件格式为
*
* 000 XXX 100 100 100
*
*/
public static void read() throws Exception {
List<Student> stus = new ArrayList<Student>();
// 读文件操作
BufferedReader fr = new BufferedReader(new FileReader(file));
String line = null;
// 读取每一行,如果结束了,line会为空
while ((line = fr.readLine()) != null && line.trim().length() > 0) {
// 每一行创建一个Student对象,并存入数组中
stus.add(new Student(line));
}
fr.close();
// 排序这个List
Collections.sort(stus);
// 依次打印每个学生
for (Student stu : stus) {
System.out.println(stu);
}
}
/**
*
* 赠送的方法
*
* 随机生成文件,length代表要生成几个学生
*
* lenth必须小于1000,未做判断
*
* @param length
*/
public static void randomFile(int length) throws IOException {
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file);
StringBuffer sb = new StringBuffer();
Random rd = new Random();
for (int i = 0; i < length; i++) {
// 清空StringBuffer
sb.delete(0, sb.length());
if (i < 10) {
sb.append("00");
} else if (i < 100) {
sb.append("0");
}
sb.append(i + " ");
sb.append("name" + i + " ");
sb.append(rd.nextInt(100) + " ");
sb.append(rd.nextInt(100) + " ");
sb.append(rd.nextInt(100) + "\r\n");
fw.write(sb.toString());
}
fw.close();
}
public static void main(String[] args) throws Exception {
read();
}
/**
* 定义一个学生类,简单定义一个成员为String数组,依次代表
*
* 学号 姓名 课程1 课程2 课程3
*
* 实现Comparable接口,是为了排序所用
*
*/
private static class Student implements Comparable<Student> {
private String[] str;
public Student(String line) {
// 这里应该进行错误判断
// 比如成绩是否是整型等
str = line.trim().split(" ");
}
// 获取学生平均成绩
public double getAve() {
double c1 = Double.parseDouble(str[2]);
double c2 = Double.parseDouble(str[3]);
double c3 = Double.parseDouble(str[4]);
return (c1 + c2 + c3) / 3;
}
// 实现该方法,如果小于返回-1,大于返回1,相等返回0
public int compareTo(Student o) {
if (this.getAve() > o.getAve()) {
return 1;
} else if (this.getAve() < o.getAve()) {
return -1;
} else {
return 0;
}
}
// 重写toString方法,用于打印
public String toString() {
return str[0] + "\t" + str[1] + "\t" + this.getAve();
}
}
}
展开全部
String path=request.getRealPath("");//取得当前目录的路径
FileReader fr=new FileReader(path + "\\file\\inc\\t.txt");//建立FileReader对象,并实例化为fr
BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象,并实例化为br
String Line=br.readLine();//从文件读取一行字符串
//判断读取到的字符串是否不为空
while(Line!=null){
out.println(Line + "<br>");//输出从文件中读取的数据
Line=br.readLine();//从文件中继续读取一行数据
}
br.close();//关闭BufferedReader对象
fr.close();//关闭文件
FileReader fr=new FileReader(path + "\\file\\inc\\t.txt");//建立FileReader对象,并实例化为fr
BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象,并实例化为br
String Line=br.readLine();//从文件读取一行字符串
//判断读取到的字符串是否不为空
while(Line!=null){
out.println(Line + "<br>");//输出从文件中读取的数据
Line=br.readLine();//从文件中继续读取一行数据
}
br.close();//关闭BufferedReader对象
fr.close();//关闭文件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询