java读取文件内容并计算后格式输出!

从文件student读入学生成绩,文件格式为学号姓名课程1课程2课程3000XXX100100100计算并输出所有学生的平均成绩,按从高到低排序,输出格式为学号姓名平均成... 从文件student读入学生成绩,文件格式为

学号 姓名 课程1 课程2 课程3
000 XXX 100 100 100

计算并输出所有学生的平均成绩,按从高到低排序,输出格式为

学号 姓名 平均成绩
000 XXX 100
展开
 我来答
akfucc
2008-07-08 · TA获得超过5454个赞
知道大有可为答主
回答量:1771
采纳率:0%
帮助的人:2200万
展开全部
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();
}
}
}
jiwangli
2008-07-08
知道答主
回答量:11
采纳率:0%
帮助的人:0
展开全部
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();//关闭文件
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式