鱼C论坛

 找回密码
 立即注册
查看: 3272|回复: 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 | 显示全部楼层
  这道题后来在一本书上找到了相关的解法,不知道有没有跟我有同样的问题的朋友,在这里记录下。
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[0].trim();
                   String name1=sa[1].trim();
                   String eamil=sa[2].trim();
                   int age1=Integer.parseInt(sa[3].trim());
                   boolean gender1=sa[5].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


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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 12:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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