笔记 - 12 字符流 对象操作流 Properties 练习

题目1[字符流]

请使用“便捷字符流”配合数组将文件"窗里窗外"的内容打印到控制台,并统计出读文本共使用的时间;

效果:
在这里插入图片描述

在这里插入图片描述

参考代码:

public static void main(String[] args) throws IOException {
        long t1 = System.currentTimeMillis();
        FileReader fr = new FileReader("窗里窗外.txt",Charset.forName("gbk"));
        char[] arr = new char[1024];
        int len = 0;
        while ((len=fr.read(arr))!=-1){
            String s = new String(arr, 0, len);
            System.out.print(s);//注意输出语句不带 ln
        }
        fr.close();
        long t2 = System.currentTimeMillis();
        System.out.println();
        System.out.println("-----------------------------------------------");
        System.out.println("读取文件共使用了:"+(t2-t1)+"毫秒!");
    }

题目2[字符流缓冲流]

将下列文件中的学生信息按照年龄升序排序后重新写回原文件;

要求:

1:使用字符缓冲流完成;

2:每次循环读取一行信息

3:写数据的时候换行使用newLine方法;

效果:

1.txt文件排序前:

在这里插入图片描述

1.txt文件排序后:

在这里插入图片描述

参考代码:

public static void main(String[] args) throws Exception {
        //创建文件对象和字符缓冲流对象,准备读数据
        File f = new File("1.txt");
        BufferedReader br = new BufferedReader(new FileReader(f));
        //准备TreeSet集合,用于保存读到的学生对象并排序
        TreeSet<Student> set = new TreeSet<>((s1,s2)->s1.getAge()-s2.getAge()==0?s1.getName().compareTo(s2.getName()):s1.getAge()-s2.getAge());
        String s = null;
        while ((s=br.readLine())!=null){
            String[] split1 = s.split(",");
            //把按照切分出来的数组的第1个值作为name,第二个值作为age创建学生对象,并按照年龄排序
            Student stu = new Student(split1[0],Integer.parseInt(split1[1]));
            set.add(stu);
        }
        //创建输出流,并把set集合中的学生信息重新写入1.txt文件中;(重写Student的toString方法了)
        BufferedWriter bw = new BufferedWriter(new FileWriter("1.txt"));
        for (Student stu : set) {
            bw.write(stu.toString());
            bw.newLine();//换行,不用考虑系统问题,比写\r\n更通用
        }
        br.close();
        bw.close();
        System.out.println("排序已完成");
    }
public class Student{
    private String name;
    private int age;
    public String toString() {
        return name +","+age;
    }
    --自己补上构造方法,getter/setter方法,hashCode和equals方法--
}

题目3[综合练习1]

完成随机点名器案例;

要求:

1:学生姓名都提前写在文件中;

2:每次敲回车,随机显示一个学生姓名,每人最多显示一次,所有人都显示完了就结束程序;

3:输入over结束程序;

效果:

在这里插入图片描述

参考代码:

//存学生姓名
    private static ArrayList<String> list=new ArrayList<>();
    //静态代码块是为了读txt中的数据进入集合中
    static {
        try {
            FileReader fr = new FileReader("stu.txt");
            BufferedReader bf = new BufferedReader(fr);
            while (true){
                String s = bf.readLine();
                if(s!=null&&s.trim().length()>0){
                    list.add(s);
                }else {
                    break;
                }
            }
            //随机打乱顺序
            Collections.shuffle(list);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    public static void main(String[] args) throws Exception{
        System.out.println("今日第1位幸运学生是:"+list.remove(0));
        Scanner sc = new Scanner(System.in);
        int i=2;
        while (true){
            System.out.println("回车查看下一位同学,输入over结束程序:");
            String s=sc.nextLine();
            if("over".equalsIgnoreCase(s)){
                System.out.println("谢谢使用,拜拜!");
                return;
            }
            //如果集合中没有数据了,也要结束程序
            if(list.size()==0){
                System.out.println("所有学生已经全部点名一遍了;");
                return;
            }
            //输入的既不是over而且集合中的数据还大于0,那么就可以移除最大索引的元素,作为幸运学生了
            System.out.println("今日第"+i++ +"位幸运学生是:"+list.remove(list.size()-1));
        }
    }

题目4[综合练习2]

假如config.properties文件上有如下信息.

username=zs

password=123

color=red

请使用键盘录入要登陆的用户名和密码.判断是否正确打印登陆成功和登陆失败.

要求:

如果登陆成功要读取该用户的color属性的值.

如果color=red 以红色字体把用户所有信息打印到控制台. // System.err.println(prop);

如果color=black 以黑色字体把用户所有信息打印到控制台. // System.out.println(prop);

效果:

在这里插入图片描述

参考代码:

public static void main(String[] args) throws Exception {
        //让用户输入信息
        Scanner sc = new Scanner(System.in);
        while (true){
            System.out.println("请输入用户名:");
            String name = sc.next();
            System.out.println("请输入密码:");
            String password = sc.next();
            //从配置文件中获取正确的用户信息
            FileReader fr = new FileReader("config.properties");
            Properties p = new Properties();
            p.load(fr);
            //判断用户名和密码是否正确并提示信息
            String username = p.getProperty("username");
            String password2 = p.getProperty("password");
            if (username.equals(name) && password2.equals(password)) {
                //说明用户名密码正确
                String col = p.getProperty("username");
                if("red".equals(p.getProperty("color"))){
                    System.err.println("亲爱的,"+ name+",登录成功,您的信息如下:");
                    System.err.println(p);
                }else {
                    System.out.println("亲爱的,"+ name+",登录成功,您的信息如下:");
                    System.out.println(p);
                }
                break;
            }else {
                System.out.println("登录失败,用户名或密码不对呀!");
            }
        }
    }

版权声明:本文为qq_45181415原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。