鱼C论坛

 找回密码
 立即注册
查看: 2993|回复: 1

在做一道java的io里的将文件内容排序的题 求大神帮助!~

[复制链接]
发表于 2017-6-26 16:05:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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[0];// 姓名
                                dt = data[1];// 时间
                                score = data[2];
                                // String score =data [2];//分数

                                // score = Integer.parseInt(data[2]);
                                // 分数--将字符串转成整形
                                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
                          
                }
        }

   请教大神们,谢谢

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-1-2 10:25:53 | 显示全部楼层
  这道题后来在一本书上找到了相关的解法,不知道有没有跟我有同样的问题的朋友,在这里记录下。
  1. package io;
  2. //一个IO的完整实例1
  3. /*
  4. * 要求计算Java成绩的平均分数,打印输出不及格的学生名字以及
  5. * 按照Java成绩的排序输出清单(降序输出)
  6. * */
  7. public class Student implements java.io.Serializable,Comparable{
  8.         private String id,name,email;
  9.         private int java,age;
  10.         private boolean gender;
  11.         //构造方法1
  12.         public Student(){
  13.                
  14.         }
  15.         //构造方法2
  16.         public Student(String id, String name, String email, int java, int age,
  17.                         boolean gender) {
  18. //                super();
  19.                 this.id = id;
  20.                 this.name = name;
  21.                 this.email = email;
  22.                 this.java = java;
  23.                 this.age = age;
  24.                 this.gender = gender;
  25.         }
  26.         public String getId() {
  27.                 return id;
  28.         }
  29.         public void setId(String id) {
  30.                 this.id = id;
  31.         }
  32.         public String getName() {
  33.                 return name;
  34.         }
  35.         public void setName(String name) {
  36.                 this.name = name;
  37.         }
  38.         public String getEmail() {
  39.                 return email;
  40.         }
  41.         public void setEmail(String email) {
  42.                 this.email = email;
  43.         }
  44.         public int getJava() {
  45.                 return java;
  46.         }
  47.         public void setJava(int java) {
  48.                 this.java = java;
  49.         }
  50.         public int getAge() {
  51.                 return age;
  52.         }
  53.         public void setAge(int age) {
  54.                 this.age = age;
  55.         }
  56.         public boolean isGender() {
  57.                 return gender;
  58.         }
  59.         public void setGender(boolean gender) {
  60.                 this.gender = gender;
  61.         }
  62.         
  63.         
  64.         @Override
  65.         public int hashCode() {//实现散列方法
  66.         return id.hashCode();
  67.         }
  68.         @Override
  69.         public boolean equals(Object obj) {
  70.                 if (this == obj)
  71.                         return true;
  72.                 if (obj == null)
  73.                         return false;
  74.            if(obj instanceof Student){ //如果学号相等就认为对象相等
  75.                    return id.equals(((Student)obj).id);//并没有比较全部的属性数据
  76.            }
  77.            return false;
  78.         }
  79.         @Override
  80.         public int compareTo(Object o) {//提供对象的比较方法
  81.                 Student s=(Student)o;
  82.                 return s.java-this.java;
  83.                 /*
  84.                  * 注意:不是this.java-s.java
  85.                  * 因为需要按照java成绩降序输出成绩单
  86.                  * */
  87.         }
  88.         public String toString(){
  89.                 return "Student{"+"id="+id+",name="+name+",email="+email+",java="
  90.                                 +java+",age"+age+",gender="+gender+"}";
  91.                
  92.         }

  93. }
复制代码
  1. package io;

  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.InputStreamReader;
  6. import java.lang.reflect.Array;
  7. import java.util.ArrayList;
  8. import java.util.Collection;
  9. import java.util.Collections;
  10. import java.util.StringTokenizer;
  11. //一个IO的完整实例2
  12. public class TextDataLoader {
  13.         //从文本文件中加载数据,返回一个List集合
  14. public ArrayList<Student>load(){
  15.         //创建一个空的集合
  16.          ArrayList<Student>r=new ArrayList<Student>();
  17.          try {
  18.                  //以字节流的形式读入

  19.                  /*
  20.                   * 因为是用字节流来写媒介,所以对应的是OutputStream
  21.                   *
  22.                   * */
  23.                 FileInputStream fis=new FileInputStream("d:/a.txt");
  24.                 //将字节流按照指定编码转换为字符流
  25.                 InputStreamReader isr=new InputStreamReader(fis,"GBK");
  26.                 //该类提供缓存字符流功能,同时将会过滤掉回车和换行符,提供行数据读入
  27.                 BufferedReader br=new BufferedReader(isr);
  28.                 String s="";
  29.                 while((s=br.readLine())!=null){
  30.                         s=s.trim();
  31.                         //如果行数据是空,则继续读下一行
  32.                         if(s.length()==0)continue;
  33.                         //字符串分割器类
  34.                         StringTokenizer st=new StringTokenizer(s,",");
  35.                         //分隔为数据项集合
  36.                         String id=st.nextToken().trim();
  37.                    String name=st.nextToken().trim();
  38.                    String email=st.nextToken().trim();
  39.                    int age=Integer.parseInt(st.nextToken().trim());
  40.                    int java=Integer.parseInt(st.nextToken().trim());
  41.                    boolean gender=st.nextToken().trim().equals("男");
  42.                    /*调用String类的spilt方法也可以实现
  43.                    String[] sa=s.split(",");
  44.                    String id1=sa[0].trim();
  45.                    String name1=sa[1].trim();
  46.                    String eamil=sa[2].trim();
  47.                    int age1=Integer.parseInt(sa[3].trim());
  48.                    boolean gender1=sa[5].trim().equals("男");
  49.                    */
  50.                    Student stu=new Student(id, name, email, java, age, gender);
  51.                    r.add(stu);
  52.                 }
  53.         } catch (Exception e) {
  54.                 e.printStackTrace();
  55.         }
  56.          return r;

  57. }
  58. public static void main(String[] args) {
  59.        
  60.         TextDataLoader dll=new TextDataLoader();
  61.         ArrayList<Student>list=dll.load();//加载数据文件内容到集合list
  62.         int sum=0;//累加成绩
  63.         for (int i = 0; i < list.size(); i++) {
  64.                 Student s=list.get(i);
  65.                 sum+=s.getJava();
  66.                 if (s.getJava()<60) {
  67.                         System.out.println(s.getName()+"failed.");
  68.                 }
  69.         }
  70.         System.out.println("average="+1.0*sum/list.size());//输出平均成绩
  71.         Collections.sort(list);//排序集合
  72.         for (int i = 0; i < list.size(); i++) {//按照成绩降序输出成绩单
  73.                 Student s=list.get(i);
  74.                 System.out.println(s.getId()+"\t\t\t"+s.getName()+"\t\t\t"+s.getJava());
  75.         }
  76.        
  77.        
  78.        
  79.        
  80. }
  81. }
复制代码

  这里放上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


具体的参考注释应该就很清楚啦,希望我能够彻底掌握它~

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 02:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表