• 字符流用户注册案例、字符缓冲流、字符缓冲流特有功能、字符缓冲流操作文件中的数据排序案例


    字符流用户注册案例

    • 案例需求:

       	将键盘录入的用户名和密码保存到本地实现永久化存储
      
      • 1
    • 实现步骤

      • 获取用户输入的用户名和密码(这里使用 scanner 键盘录入)
      • 将用户输入的用户名和密码写入到本地文件中
      • 关流,释放资源
    • 代码实现:

    package com.hcx;
    
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.Scanner;
    
    public class Demo4 {
        public static void main(String[] args) throws IOException {
            Scanner scanner = new Scanner(System.in);
            System.out.println("请录入用户名:");
            String username = scanner.next();
            System.out.println("请录入密码:");
            String password = scanner.next();
    
            FileWriter fileWriter = new FileWriter("a.txt");
            fileWriter.write(username);
            fileWriter.write("\r\n");
            fileWriter.write(password);
            fileWriter.flush();
            fileWriter.close();
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 输入用户名和密码:
      在这里插入图片描述

    • 运行成功后当前模块下的 a.txt 文件的内容
      在这里插入图片描述

    字符缓冲流

    上次我们讲字节流的时候提到过字节缓冲流,它可以提高字节输入流和字节输出流读数据和写数据的效率,同样字符流也有提高效率的字符缓冲流

    • 字符缓冲流介绍

      • BufferedWriter:

           将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串
           的高效写入,可以指定缓冲区大小,或者可以接受默认大小。默认值
           足够大,可用于大多数用途。
        
        • 1
        • 2
        • 3
      • BufferedReader:

          从字符输入流读取文本,缓冲字符,以提供字符,数组,和行的高效
          读取,可以指定缓冲区大小,或者可以使用默认大小。默认值足够大
          可用于大多数用途。
        
        • 1
        • 2
        • 3
    • 构造方法

    方法名说明
    BufferedWriter(Writer out)创建字符缓冲输出流对象
    BufferedReader(Reader in)创建字符缓冲输入流对象
    • 代码演示
    package com.hcx;
    
    import java.io.*;
    
    public class Demo5 {
        public static void main(String[] args) throws IOException {
    
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("bw.txt"));
            bufferedWriter.write("hello\r\n");
            bufferedWriter.write("world\r\n");
            bufferedWriter.close();
    
            BufferedReader bufferedReader = new BufferedReader(new FileReader("bw.txt"));
    
            //一次读取一个字符数据
    //        int ch;
    //        while ((ch = bufferedReader.read()) != -1) {
    //            System.out.println((char) ch);
    //        }
    
    
            // 一次读取一个字符数组数据
     
            char[] chars = new char[1024];
            int len;
            while ((len = bufferedReader.read(chars)) != -1) {
                System.out.println(new String(chars, 0, len));
            }
            bufferedReader.close();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    字符缓冲流特有功能

    • 方法介绍
      BufferedWriter:
    方法名说明
    void newLine()写一行行分隔符,行分隔符字符串由系统属性定义

    BufferedReader:

    方法名说明
    String readLine()读一行文字,结果包含行的内容的字符串,不包括任何行终止字符如果流的末尾已经到达,则为 null
    • 代码演示
    package com.hcx;
    
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class Demo6 {
        public static void main(String[] args) throws IOException {
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("bw.txt"));
            bufferedWriter.write("abc");
            bufferedWriter.newLine();
            bufferedWriter.write("6666");
            bufferedWriter.close();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 运行结果
      在这里插入图片描述
    package com.hcx;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class Demo7 {
        public static void main(String[] args) throws IOException {
            BufferedReader bufferedReader = new BufferedReader(new FileReader("bw.txt"));
            String line;
            while((line=bufferedReader.readLine())!= null){
                System.out.println(line);
            }
            bufferedReader.close();
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    运行结果
    在这里插入图片描述

    字符缓冲流操作文件中的数据排序案例

    • 案例需求

       使用字符缓冲流读取文件中的数据,排序后再次写到本地文件
      
      • 1
    • 实现步骤

      • 将文件中的数据读取到程序中
      • 对读取的数据进行处理
      • 将处理后的数据添加到集合中
      • 对集合中的数据进行排序
      • 将排序后的集合中的数据写入到文件中
    • 代码演示

    package com.hcx;
    
    import java.io.*;
    import java.util.Arrays;
    
    public class Demo8 {
        public static void main(String[] args) throws IOException {
            //需求:读取文件中的数据,排序后再将数据写到本地文件
            //分析:
            //1.要把文件中的数据读取出来
            BufferedReader bufferedReader = new BufferedReader(new FileReader("sort.txt"));
            //输出流一定不能写在这里,否则会清空文件内容
            String line = bufferedReader.readLine();
            System.out.println("读到的数据为:" + line);
            bufferedReader.close();
            //2.按照空格进行切割
            String[] split = line.split(" ");
            //3.把字符串数组类型变为 int 类型
            int[] arr = new int[split.length];
            //遍历 split 数组,可以进行类型转换
            for (int i = 0; i < arr.length; i++) {
                String smallStr = split[i];
                //类型转换
                int number = Integer.parseInt(smallStr);
                //把转换后的结果存到 arr 中
                arr[i] = number;
            }
            //4.排序
            Arrays.sort(arr);
            System.out.println(Arrays.toString(arr));
            //5.把排序之后结果写回到本地 1 2 3 4...
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("sort.txt"));
            //写出
            for (int i = 0; i < arr.length; i++) {
                bufferedWriter.write(arr[i] + " ");
                bufferedWriter.flush();
            }
            //释放资源
            bufferedWriter.close();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 没排序前 sort.txt 文件中的数据

    在这里插入图片描述

    • 运行
      在这里插入图片描述

    • 排序后的 sort.txt 文件中的数据
      在这里插入图片描述

    IO流小结

    在这里插入图片描述

  • 相关阅读:
    Linux--CE-->DNS服务器详解
    新160个CrackMe分析-第1组:1-10(上)
    vue3使用vuex
    springcloudAlibaba之Nacos服务注册源码分析
    【FineReport企业日常问题 3.0】帆软Finereport跨大版本打开设计文件(包括cpt,frm等)
    移动端vw适配记录
    OceanBase!一场专为开发者打造的数据库技术交流盛宴!
    VS2019编译boost_1_79,生成32位和64位静态库
    【QT开发(8)】QT 中使用tensorrt
    LRTA*(Learning-RTA*)
  • 原文地址:https://blog.csdn.net/hihielite/article/details/127940029