黑马程序员技术交流社区

标题: 怎么该输出到控制台上的信息放到txt中 [打印本页]

作者: yiranpanda    时间: 2015-11-17 11:52
标题: 怎么该输出到控制台上的信息放到txt中
package com.itheima;

import static java.lang.Integer.parseInt;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeSet;

public class Test4 {

        /**
         * 有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,
         * 输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。
         * 要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
                    BufferedReader bd = new BufferedReader(new InputStreamReader(System.in));
                    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter("stu.txt"));
                    System.out.println("请输入学生成绩格式是:姓名,语文成绩,数学成绩,英语成绩");
                    //创建TreeSet集合对象,在TreeSet的构造函数中传入比较器,按照总分比较
                    TreeSet<Student> ts = new TreeSet<>(new Comparator<Student>() {

                            @Override
                            public int compare(Student s1, Student s2) {
                                    int num = s2.getSum() - s1.getSum();
                                    return num == 0 ? 2 : num;
                            }
                    });
                    //录入五个学生,所以以集合中的学生个数为判断条件,如果size是小于5就进行存储
                    while(ts.size() < 5) {
                            //将录入的字符串切割,用逗号切割,会返回一个字符串数组,将字符串数组中从二个元素转换成int数,
                            String line = bd.readLine();
                            String[] arr = line.split(",");
                            int chinese = Integer.parseInt(arr[1]);
                            int math = Integer.parseInt(arr[2]);
                            int english = Integer.parseInt(arr[3]);
                            //将转换后的结果封装成Student对象,将Student添加到TreeSet集合中
                            ts.add(new Student(arr[0], chinese, math, english));
                    }
                   
                    //遍历TreeSet集合打印每一个Student对象
                    for (Student s : ts) {
                            System.out.println(s);                            
                    }
        }
               
}
class Student {
        private String name;
        private int chinese;
        private int math;
        private int english;
        private int sum;
       
        public Student() {
                super();
               
        }
        public Student(String name, int chinese, int math, int english) {
                super();
                this.name = name;
                this.chinese = chinese;
                this.math = math;
                this.english = english;
                this.sum = this.chinese + this.math + this.english;
        }
        public int getSum() {
                return sum;
        }
       
        public String toString() {
                return name + "," + chinese + "," + math + "," + english + "," + sum;
        }
       
}



作者: 歪歪头    时间: 2015-11-17 12:20
还是不懂 还是不懂。。。。
作者: 特立独行    时间: 2015-11-17 23:19
我也没看懂,表示过来学习一下~
作者: mars314    时间: 2015-11-17 23:50
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.TreeSet;

public class Test
{

        /**
         * 有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,
         * 输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。
         * 要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
         *
         * @throws IOException
         */
        public static void main(String[] args) throws IOException
        {
                BufferedReader bd = new BufferedReader(new InputStreamReader(System.in));
                 BufferedWriter bw = new BufferedWriter(new FileWriter("stu.txt"));
                //System.out.println("请输入学生成绩格式是:姓名,语文成绩,数学成绩,英语成绩");
                // 创建TreeSet集合对象,在TreeSet的构造函数中传入比较器,按照总分比较
                TreeSet<Student> ts = new TreeSet<Student>();
                // 录入五个学生,所以以集合中的学生个数为判断条件,如果size是小于5就进行存储
                while (ts.size() < 5)
                {
                        // 将录入的字符串切割,用逗号切割,会返回一个字符串数组,将字符串数组中从二个元素转换成int数,
                        String line = bd.readLine();
                        String[] arr = line.split(",");
                        int chinese = Integer.parseInt(arr[1]);
                        int math = Integer.parseInt(arr[2]);
                        int english = Integer.parseInt(arr[3]);
                        // 将转换后的结果封装成Student对象,将Student添加到TreeSet集合中
                        ts.add(new Student(arr[0], chinese, math, english));
                }

                // 遍历TreeSet集合打印每一个Student对象
                for (Student s : ts)
                {
                        //System.out.println(s);
                        bw.write(s.toString());
                        bw.newLine();
                }
                bd.close();
                bw.close();
        }

}

class Student  implements Comparable
{
        private String name;
        private int chinese;
        private int math;
        private int english;
        private int sum;

        public Student(String name, int chinese, int math, int english)
        {
                this.name = name;
                this.chinese = chinese;
                this.math = math;
                this.english = english;
                sum = chinese + math + english;
        }

        public int getSum()
        {
                return sum;
        }

        public String toString()
        {
                return name + "," + chinese + "," + math + "," + english + "," + sum;
        }
       
        public int compareTo(Object obj)
        {
               
                if(!(obj instanceof Student))
                        throw new RuntimeException("不是学生对象");
                Student s = (Student)obj;

                if(this.sum<s.sum)
                        return 1;
                if(this.sum==s.sum)
                {
                        return s.name.compareTo(this.name);
                }
                return -1;
        }
}


作者: mars314    时间: 2015-11-17 23:53
希望能帮到你。
作者: silentCat    时间: 2015-11-19 23:16
//遍历TreeSet集合打印每一个Student对象
  1. BufferedWriter br=new BufferedWriter(FileWriter("stu.txt"));
  2. for(Student s:stu)
  3. {
  4.         br.write(s.toString());
  5.         br.newLine();
  6.         br.flush();
  7. }
  8. br.close();
复制代码

你试一下
作者: Hansion    时间: 2015-11-19 23:16
比方说你的程序编译好后叫1.exe
在命令行输入
1.exe >result.txt

运行之后,控制台的东西就保存到result.txt里
作者: 年强    时间: 2015-11-20 00:10
  1. import java.io.*;
  2. import java.util.*;

  3. public class test
  4. {

  5.         /**
  6.          * 有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,
  7.          * 输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。
  8.          * 要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
  9.          *
  10.          * @throws IOException
  11.          */
  12.         public static void main(String[] args) throws Exception
  13.         {
  14.                 BufferedReader bd = new BufferedReader(new InputStreamReader(System.in));
  15.                  BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\stus.txt"));
  16.                 //System.out.println("请输入学生成绩格式是:姓名,语文成绩,数学成绩,英语成绩");
  17.                 // 创建TreeSet集合对象,在TreeSet的构造函数中传入比较器,按照总分比较
  18.                 TreeSet<Student> ts = new TreeSet<Student>();
  19.                 // 录入五个学生,所以以集合中的学生个数为判断条件,如果size是小于5就进行存储
  20.                 while (ts.size() < 5)
  21.                 {
  22.                         // 将录入的字符串切割,用逗号切割,会返回一个字符串数组,
  23.                                                 //将字符串数组中从二个元素转换成int数,第一个是姓名
  24.                         String line = bd.readLine();
  25.                         String[] arr = line.split(",");
  26.                         int chinese = Integer.parseInt(arr[1]);
  27.                         int math = Integer.parseInt(arr[2]);
  28.                         int english = Integer.parseInt(arr[3]);
  29.                         // 将转换后的结果封装成Student对象,将Student添加到TreeSet集合中
  30.                         ts.add(new Student(arr[0], chinese, math, english));
  31.                 }

  32.                 // 遍历TreeSet集合打印每一个Student对象
  33.                 for (Student s : ts)
  34.                 {
  35.                         //System.out.println(s);
  36.                         bw.write(s.toString());
  37.                         bw.newLine();
  38.                 }
  39.                 bd.close();
  40.                 bw.close();
  41.         }

  42. }

  43. class Student  implements Comparable
  44. {
  45.         private String name;
  46.         private int chinese;
  47.         private int math;
  48.         private int english;
  49.         private int sum;

  50.         public Student(String name, int chinese, int math, int english)
  51.         {
  52.                 this.name = name;
  53.                 this.chinese = chinese;
  54.                 this.math = math;
  55.                 this.english = english;
  56.                 sum = chinese + math + english;
  57.         }

  58.         public int getSum()
  59.         {
  60.             return sum;
  61.         }

  62.         public String toString()
  63.         {
  64.             return "["+name + "," + chinese + "," + math + "," + english + "," + sum+"]";
  65.         }
  66.       
  67.         public int compareTo(Object obj)
  68.         {
  69.                
  70.                 if(!(obj instanceof Student))
  71.                         throw new RuntimeException("不是学生对象");
  72.                 Student s = (Student)obj;

  73.                 if(this.sum<s.sum)
  74.                         return 1;
  75.                 if(this.sum==s.sum)
  76.                 {
  77.                     return s.name.compareTo(this.name);
  78.                 }
  79.                 return -1;
  80.         }
  81. }
复制代码


结果:
[j,99,99,99,297]
[i,100,90,90,280]
[n,90,96,85,271]
[y,89,79,98,266]
[h,88,88,88,264]

作者: tansuozhey    时间: 2015-11-20 09:34
  1. /**
  2. * 有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,
  3. * 输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。
  4. * 要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
  5. */

  6. /**
  7. * 1.先录入信息;
  8. * 2.进行排序;
  9. * 3.输出到文件中。
  10. */
  11. package com.itheima.problem;

  12. import  java.io.*;
  13. import  java.util.*;


  14. class Student  implements Comparable<Object>{
  15.          String studentName;
  16.          float  chineseReport;
  17.          float  mathReport;
  18.          float  englishReport;
  19.          float  sumScore;
  20.    
  21.         public Student() {         
  22.        
  23.         }
  24.        
  25.         public static Student  StudentFactory(String s){
  26.                 System.out.println(s);
  27.                 String[] data;
  28.                 Student sd = new Student();
  29.         data = s.split(",");
  30.         
  31.         for(int i=0;i<data.length;i++){
  32.                 System.out.println(data[i]);
  33.         }
  34.         
  35.         sd.studentName = data[0];
  36.         sd.chineseReport = Float.parseFloat(data[1]);
  37.         sd.mathReport = Float.parseFloat(data[2]);
  38.             sd.englishReport = Float.parseFloat(data[3]);
  39.             sd.sumScore = Float.parseFloat(data[1])
  40.                             +Float.parseFloat(data[2])+
  41.                             Float.parseFloat(data[3]);
  42.            
  43.             return sd;
  44.         }
  45.        
  46.         @Override
  47.         public String toString() {
  48.                 return studentName + " " + chineseReport + " "
  49.                                 + mathReport + " " + englishReport + " " + sumScore;
  50.         }
  51.        
  52.         public int compareTo(Object o)
  53.         {      
  54.            if(!(o instanceof Student))
  55.                    throw new RuntimeException("不是学生对象");
  56.           
  57.            Student s = (Student)o;
  58.            if(this.sumScore<s.sumScore){
  59.                    return 1;   
  60.            }   
  61.            else if(this.sumScore==s.sumScore)
  62.            {
  63.                    return this.studentName.compareTo(s.studentName);
  64.            }
  65.           
  66.            return -1;
  67.         }
  68. }

  69. public  class  Test1{
  70.         public static void main(String[] args)
  71.                         throws IOException {
  72.                 String dataInfor ;
  73.                 Student sd;
  74.                 List<Student>   stuArray =  new  ArrayList<Student>();
  75.                
  76.                 //Input Datas
  77.             System.out.println("请输入学生成绩格式是:姓名,语文成绩,数学成绩,英语成绩:");
  78.         while(true){
  79.                     BufferedReader bd = new BufferedReader(new InputStreamReader(System.in));
  80.                     if((dataInfor = bd.readLine())!=null)        {
  81.                             if(dataInfor.equals("end")){
  82.                                     System.out.println("End Input!");
  83.                                     break;
  84.                             }   
  85.                     }
  86.                     
  87.                     sd = Student.StudentFactory(dataInfor);
  88.                     System.out.println(sd);
  89.                     stuArray.add(sd);  
  90.         }
  91.         
  92.         //sort
  93.         Collections.sort(stuArray);
  94.         System.out.println(stuArray);

  95.         //output file
  96.             PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("stu.txt")));
  97.             ListIterator< Student> it = stuArray.listIterator();
  98.             while(it.hasNext()){
  99.                     pw.println(it.next());
  100.             }
  101.             pw.close();
  102.         }
  103. }
复制代码

作者: tansuozhey    时间: 2015-11-20 09:36
vincent 40.0 40.0 40.0 120.0
lsq 30.0 30.0 30.0 90.0
tszy 20.0 20.0 20.0 60.0
作者: 约吗^_^    时间: 2015-11-20 23:47
哦,额滴神啊,转了一大圈,竟然没几个会的,给不了什么答案,好失败。。。
作者: Allen爱伦    时间: 2015-11-22 17:51
也想学习一下
作者: 木易延    时间: 2015-11-22 19:07
我都晕了
作者: hansnowqiang    时间: 2015-11-27 23:16
个人觉得8楼的比9楼的至少可读性好一点,8楼的很清晰,9楼的说真的我看不下去。
作者: Weidan    时间: 2015-11-28 20:37
今天整理笔记的时候刚整理到这个问题 System.out.println();是可以定向输入到文件的 代码如下所示
希望能帮到你
  1. //重定向
  2. System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream(new File("D:/test/system.txt"))),true)); //设置输出到文件,true表示输出后自动刷新
  3. String str = "aaa";
  4. System.out.println(str);
  5. //回到控制台
  6. System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream(FileDescriptor.out)),true));//设置回到控制台
  7. System.out.println("回到控制台");
复制代码

作者: 胖小子    时间: 2015-12-6 16:59
得到键盘的数据。
1.Map<name,student> map    student 属性{name,成绩1,成绩2,成绩3,总分}
2.意思就是 通过 Map集合 的key 总分   取出 student 对象,得到信息后,存放入文本
3.存入List 中  进行排序 。  每条数据 存放文本
作者: cai602098596    时间: 2015-12-9 21:25
tansuozhey 发表于 2015-11-20 09:34

我默默的赞一个




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2