马太效应 发表于 2017-6-26 16:05:54

在做一道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:}

马太效应 发表于 2018-1-2 10:25:53

这道题后来在一本书上找到了相关的解法,不知道有没有跟我有同样的问题的朋友,在这里记录下。
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]
查看完整版本: 在做一道java的io里的将文件内容排序的题 求大神帮助!~