Java高级_Day13(字符缓冲流,IO流小结)

Java高级_Day13(字符缓冲流,IO流小结)

字符缓冲流

BufferedWriter:

将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入。
可以指定缓冲区大小,或者可以接受默认大小。 默认值足够大,可用于大多数用途。
创建对象
BufferedWriter(Writer out) 创建使用默认大小的输出缓冲区的缓冲字符输出流。
BufferedWriter(Writer out, int sz) 创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区。
常见方法:

返回值类型方法
voidclose() 关闭流,先刷新。
voidflush() 刷新流。
voidnewLine() 写一行行分隔符。
voidwrite(char[] cbuf, int off, int len) 写入字符数组的一部分。
voidwrite(int c) 写一个字符
voidwrite(String s, int off, int len) 写一个字符串的一部分。

BufferedReader:

从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。
可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途。
BufferedReader(Reader in) 创建使用默认大小的输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz) 创建使用指定大小的输入缓冲区的缓冲字符输入流。

返回值类型方法
voidclose() 关闭流并释放与之相关联的任何系统资源。
intread() 读一个字符
intread(char[] cbuf, int off, int len) 将字符读入数组的一部分。
StringreadLine() 读一行文字。

缓冲流的使用:

public static void main(String[] args) throws IOException {
        // 创建缓冲流对象
//        File file = new File("day_13_IODemo\\dir\\buff.txt");
//        Writer out = new FileWriter(file);
//        BufferedWriter bw = new BufferedWriter(out);
        BufferedWriter bw = new BufferedWriter(new FileWriter("day_13_IODemo\\\\dir\\buff.txt"));
//        bw.write("hello\r\n"); //自己完成换行的操作,但是\r\n仅使用于windows系统
//        bw.write("world\r\n");
//        bw.write("java\r\n");
        bw.write("hello");
        bw.newLine();// 由jdk自动根据系统判定,在行末写出行分隔符
        bw.write("world");
        bw.newLine();
        bw.write("java");
        bw.newLine();
        bw.close();
//读数据
        BufferedReader  br = new BufferedReader(new FileReader("day_13_IODemo\\\\dir\\buff.txt"));
//        char[] buff = new char[1024];//传统的读的方式
//        int len;
//        while((len=br.read(buff))!= -1){
//            System.out.println(new String(buff,0,len));
//        }
        //使用BufferedReader的特有的读的方式,每次读取一行readLine
        String str ;
        while((str = br.readLine()) != null){
            System.out.println(str);
        }
    }

使用缓冲流实现文件的拷贝:

public static void main(String[] args) throws IOException {
    // 创建字符输入流  读
    BufferedReader br = new BufferedReader(new FileReader("day_13_IODemo\\dir\\BufferedDemo.java"));
    //创建字符输出流   写
    BufferedWriter  bw = new BufferedWriter(new FileWriter("day_13_IODemo\\dir\\Demo.java"));
    // 读写操作
    // 方式一:
    /*char[] cbuff = new char[1024];
    int len;
    while((len= br.read(cbuff)) != -1){
        bw.write(cbuff,0,len);
    }*/
    //方式二:
    String str ;
    while( (str = br.readLine())!= null){//readLine  在读取的时候是遇到行分隔符就结束,因此在他读取的内容中没有行分隔符
        bw.write(str);
        bw.newLine();//每次写完之后不要忘记写行分隔符
    }
    // 释放资源
    bw.close();
    br.close();
}

IO流小结

字节流:

在这里插入图片描述

字符流:

在这里插入图片描述

案例:

  1. 集合到文件【应用】
    需求:把ArrayList集合中的字符串数据写入到文本文件。要求,每一个字符串元素作为文件中的一行数据
public static void main(String[] args) throws IOException {
        //创建集合
        List<String> list = new ArrayList<>();
        //创建输出流
        BufferedWriter bw = new BufferedWriter(new FileWriter("Java_13\\dir\\list.txt"));
        //添加元素
        list.add("java");
        list.add("lanqiao");
        list.add("中北");
        //获取数据
        Iterator<String> iter = list.iterator();
        while (iter.hasNext()){
            String str = iter.next();
            bw.write(str);
            bw.newLine();
        }
        //释放资源
        bw.close();
    }
  1. 文件到集合【应用】
    需求:把文本文件中的数据读取到集合中,并遍历集合。要求:文件中每一行数据是一个集合元素
public static void main(String[] args) throws IOException {
        //创建集合
        List<String> list = new ArrayList<>();
        //创建输入流
        BufferedReader br = new BufferedReader(new FileReader("Java_13\\dir\\list.txt"));
        //从文件读取数据
        String str ;
        while((str = br.readLine()) != null){
            list.add(str);
        }
        //释放资源
        br.close();
        //遍历集合
        for(String st :list){
            System.out.println(st);
        }
    }
  1. 点名器【应用】
    需求:有一个文件里面存储了班级同学的姓名,每一个姓名占一行,要求通过程序实现随机点名器
public static void main(String[] args) throws IOException {
        //创建输入流
        BufferedReader br = new BufferedReader(new FileReader("Java-13\\dir\\names.txt"));
        //创建集合
        List<String> list = new ArrayList<>();
        //读取文件
        String str;
        while((str = br.readLine()) != null){
            list.add(str);
        }
        //释放资源
        br.close();
        //随机点名
        int index = new Random().nextInt(list.size());
        System.out.println(list.get(index));
    }
  1. 集合到文件(数据排序改进版)
    需求:键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩)。要求按照成绩总分从高到低写入文本文件
    格式:姓名,语文成绩,数学成绩,英语成绩 举例:林青霞,98,99,100
public class StudentSort2Txt {
    public static void main(String[] args) throws IOException {
        // 采用TreeSet集合
        TreeSet<Stu> set = new TreeSet<>(new Comparator<Stu>() {
            @Override
            public int compare(Stu s1, Stu s2) {
                return s1.sum() - s2.sum();
            }
        });
        //从键盘录入5个学生姓名及成绩
        for(int i = 0 ; i < 5 ; i++){
            Scanner sc = new Scanner(System.in);
            System.out.println("请录入第" + (i+1)+"个学生信息");
            System.out.println("姓名:");
            String name = sc.nextLine();
            System.out.println("语文成绩:");
            int chinese = sc.nextInt();
            System.out.println("数学成绩:");
            int  math = sc.nextInt();
            System.out.println("英语成绩:");
            int english = sc.nextInt();
            Stu stu = new Stu(name,chinese,math,english);
            set.add(stu);
        }

        // 将集合中的数据写出到文件
        BufferedWriter bw = new BufferedWriter(new FileWriter("day_13_IODemo\\stuSort.txt"));
        for (Stu stu : set){
            //需要实现字符串的拼接
            StringBuffer  sb = new StringBuffer();
            sb.append(stu.getName());
            sb.append("-");
            sb.append(stu.getChinese());
            sb.append("-");
            sb.append(stu.getMath());
            sb.append("-");
            sb.append(stu.getEnglish());
            bw.write(sb.toString());
            bw.newLine();
        }
        bw.close();
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值