在做一道java的io里的将文件内容排序的题 求大神帮助!~
import java.io.BufferedReader;import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Comparator;
import java.util.Collections;
//文件读取程序
public class FileReadTest {
static String name;
static String dt;
static String score;
public FileReadTest(String name, String dt, String score) {
this.name = name;
this.dt = dt;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getScore() {
return score;
}
public void setScore(String score) {
this.score = score;
}
public String getDt() {
return dt;
}
public void setDt(String dt) {
this.dt = dt;
}
public static void main(String[] args) {
// 从指定的文件中读取内容,显示出来
// 1.定义输入流InputStream
InputStream is = null;
// 2.定义数据来源文件对象
Path path = Paths.get("new.txt");
// 创建输入流对象
try {
is = Files.newInputStream(path, StandardOpenOption.READ);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// is.read(); 一次读一个字节
try {
// 创建字符流BufferedReader
BufferedReader br = Files.newBufferedReader(path,
Charset.defaultCharset());
// while(true){
// String s=br.readLine();//一次读一行
// if (s==null)break;//读到了文件的末尾
// System.out.println(s);
// }
String s = "";
while ((s = br.readLine()) != null) {
System.out.println(s);
// 区分出姓名 时间 分数
// 对每一行数据 按 空格 进行分割
String[] data = s.split(" ");
name = data;// 姓名
dt = data;// 时间
score = data;
// String score =data ;//分数
// score = Integer.parseInt(data);
// 分数--将字符串转成整形
System.out.println(name + ":" + dt + ":" + score);
}
// 关闭流
br.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.util.Comparator;
public class sortClass implements Comparator {
public int compare(Object arg0, Object arg1) {
FileReadTest user0 = (FileReadTest) arg0;
FileReadTest user1 = (FileReadTest) arg1;
int flag = user0.getScore().compareTo(user1.getScore());
return flag;//显示Syntax error, insert ";" to complete ReturnStatement
}
}
请教大神们,谢谢{:10_282:}
这道题后来在一本书上找到了相关的解法,不知道有没有跟我有同样的问题的朋友,在这里记录下。
package io;
//一个IO的完整实例1
/*
* 要求计算Java成绩的平均分数,打印输出不及格的学生名字以及
* 按照Java成绩的排序输出清单(降序输出)
* */
public class Student implements java.io.Serializable,Comparable{
private String id,name,email;
private int java,age;
private boolean gender;
//构造方法1
public Student(){
}
//构造方法2
public Student(String id, String name, String email, int java, int age,
boolean gender) {
// super();
this.id = id;
this.name = name;
this.email = email;
this.java = java;
this.age = age;
this.gender = gender;
}
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 getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getJava() {
return java;
}
public void setJava(int java) {
this.java = java;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isGender() {
return gender;
}
public void setGender(boolean gender) {
this.gender = gender;
}
@Override
public int hashCode() {//实现散列方法
return id.hashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if(obj instanceof Student){ //如果学号相等就认为对象相等
return id.equals(((Student)obj).id);//并没有比较全部的属性数据
}
return false;
}
@Override
public int compareTo(Object o) {//提供对象的比较方法
Student s=(Student)o;
return s.java-this.java;
/*
* 注意:不是this.java-s.java
* 因为需要按照java成绩降序输出成绩单
* */
}
public String toString(){
return "Student{"+"id="+id+",name="+name+",email="+email+",java="
+java+",age"+age+",gender="+gender+"}";
}
}
package io;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.StringTokenizer;
//一个IO的完整实例2
public class TextDataLoader {
//从文本文件中加载数据,返回一个List集合
public ArrayList<Student>load(){
//创建一个空的集合
ArrayList<Student>r=new ArrayList<Student>();
try {
//以字节流的形式读入
/*
* 因为是用字节流来写媒介,所以对应的是OutputStream
*
* */
FileInputStream fis=new FileInputStream("d:/a.txt");
//将字节流按照指定编码转换为字符流
InputStreamReader isr=new InputStreamReader(fis,"GBK");
//该类提供缓存字符流功能,同时将会过滤掉回车和换行符,提供行数据读入
BufferedReader br=new BufferedReader(isr);
String s="";
while((s=br.readLine())!=null){
s=s.trim();
//如果行数据是空,则继续读下一行
if(s.length()==0)continue;
//字符串分割器类
StringTokenizer st=new StringTokenizer(s,",");
//分隔为数据项集合
String id=st.nextToken().trim();
String name=st.nextToken().trim();
String email=st.nextToken().trim();
int age=Integer.parseInt(st.nextToken().trim());
int java=Integer.parseInt(st.nextToken().trim());
boolean gender=st.nextToken().trim().equals("男");
/*调用String类的spilt方法也可以实现
String[] sa=s.split(",");
String id1=sa.trim();
String name1=sa.trim();
String eamil=sa.trim();
int age1=Integer.parseInt(sa.trim());
boolean gender1=sa.trim().equals("男");
*/
Student stu=new Student(id, name, email, java, age, gender);
r.add(stu);
}
} catch (Exception e) {
e.printStackTrace();
}
return r;
}
public static void main(String[] args) {
TextDataLoader dll=new TextDataLoader();
ArrayList<Student>list=dll.load();//加载数据文件内容到集合list
int sum=0;//累加成绩
for (int i = 0; i < list.size(); i++) {
Student s=list.get(i);
sum+=s.getJava();
if (s.getJava()<60) {
System.out.println(s.getName()+"failed.");
}
}
System.out.println("average="+1.0*sum/list.size());//输出平均成绩
Collections.sort(list);//排序集合
for (int i = 0; i < list.size(); i++) {//按照成绩降序输出成绩单
Student s=list.get(i);
System.out.println(s.getId()+"\t\t\t"+s.getName()+"\t\t\t"+s.getJava());
}
}
}
这里放上D盘下a.txt的内容
001,张三,zs@163.com,20,60,男
002,李四,ls@163.com,16,85,女
007,王丽,wl@gamil.com,18,55,女
008,小白,xb@sina.com,17,89,男
006,熊猫,xm@sina.com,22,90,女
以及在Console里的输出结果
王丽failed.
average=75.8
006 熊猫 90
008 小白 89
002 李四 85
001 张三 60
007 王丽 55
具体的参考注释应该就很清楚啦,希望我能够彻底掌握它~
页:
[1]