IO流(二)基础知识

IO流

缓冲流分类

一、字节流 字节缓冲输入流 字节缓冲输入流

二、字符流 字符缓冲输出流 字符缓冲输出流

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jT6n6Suz-1677152969440)(D:\JAVA笔记(第一遍)\assets\1673586555475.png)]

一、字节流

1、字节缓冲输入流 BufferedInputStream

BufferedInputStream bis = new BufferedInputStream(包装前的字节输入流);

1、字节缓冲输出流 BufferedOutputStream

BufferedOutputStream bos = new BufferedOutputStream(包装前的字节输出流);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-if23HYkn-1677152969441)(D:\JAVA笔记(第一遍)\assets\1673587037665.png)]

总结

相当于再普通的字节流上 ,加了一个缓冲区,缓冲区的大小是8KB。性能更好

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-foUoQdxG-1677152969441)(D:\JAVA笔记(第一遍)\assets\1673586908215.png)]

整体代码

package com.maoteng.d1_byte_buffer;

import java.io.*;

public class ByteBuffer {
    public static void main(String[] args) {
//
        try {
//            创建一个文件字节输入流管道,连通源文件
            InputStream is = new FileInputStream("D:\\JAVA笔记(第一遍)\\IO流.md");
//            包装成高级字节缓冲输入流
            BufferedInputStream bis = new BufferedInputStream(is);

//            创建一个文件字节输出流管道,连通目标文件
            OutputStream os = new FileOutputStream("D:/newdfasdfd.md");
//            将其包装为高级字节输出缓冲流
            BufferedOutputStream bos = new BufferedOutputStream(os);

//            进行读写数据
            byte[] buffer = new byte[1024];
            int len;
            while ((len=bis.read(buffer))!=-1){
                bos.write(buffer,0,len);
            }
            System.out.println("复制成功~");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

二、字符流

字符缓冲输入流

BufferedReader stream = new BufferedReader(rd);

字符缓冲输出流

 BufferedWriter bufferedWriter = new BufferedWriter(writer);

整体代码

package com.maoteng.d3_char_buffer;

import java.io.*;

public class CharBufferDemo2 {
    public static void main(String[] args) {
//        创建一个字符输出流。连接目标文件
        try (
//
                Reader reader = new FileReader("io-app\\src\\date3.tet");
                Writer writer = new FileWriter("io-app\\tt", true);
                BufferedWriter bufferedWriter = new BufferedWriter(writer);
                BufferedReader bufferedReader = new BufferedReader(reader);
        ) {
            int len;
            char[] chars = new char[1024];
            while ((len = bufferedReader.read(chars)) != -1) {
                bufferedWriter.write(chars, 0, len);
            }
            System.out.println("复制成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

三、可以按行读取

{
            String len;    // 存储每次读取的一行字符
            while ((len = stream.readLine())!=null){
                // 打印每行数据
                System.out.println(len);
 }

整体代码

package com.maoteng.d3_char_buffer;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class CharBufferDemo03 {
    public static void main(String[] args) {
        try (
            // 创建通道
                Reader rd = new FileReader("io-app\\tt");
            // 创建高级通道
                BufferedReader stream = new BufferedReader(rd);
        ) {
            String len;    // 存储每次读取的一行字符
            while ((len = stream.readLine())!=null){
                // 打印每行数据
                System.out.println(len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

高级IO流案例

目标  :将乱序的出师表 ,排序好放入到另一个文件中

1、创建高级字符输入流和字符输出流

BufferedReader bufferedReader = new BufferedReader(基础输入流);
BufferedWriter bufferedWriter = new BufferedWriter(基础输出流);

2、读取每行数据,并存入到集合中

{
            String len;  // 记录每行字符
            List<String> list = new ArrayList<>();  // 存放每行字符
		// 读取每行数据放到记录中,如果不为空继续读,然后存到集合中
            while ((len = bufferedReader.readLine()) != null) {
                list.add(len);
}

3、进行排序

"一","二","三","四","五","陆","柒","八","九","十","十一"

​ 1、首先 制定 大小比较规则

List<String> size = new ArrayList<>();  // 用于存储这些需要排序的元素
Collections.addAll(size,"一","二","三","四","五","陆","柒","八");

​ 2、然后 比较规则选择用—— 索引记录大小

​ ①取其字符对应的索引

.先帝创业未半而中道崩殂
二.宫中府中
三.侍中
四.将军向宠

int index = indexof(“字符”) 取索引 字符无法固定→用o1 ,o2代替

取 . 之前的字符 substring (0, .的所索引); .的所索引 怎么取 →indexof(“.”);

size.indexOf(o1.substring(0,o1.indexOf("."))) 

升序 :

size.indexOf(o1.substring(0,o1.indexOf(".")))
-size.indexOf(o2.substring(0,o2.indexOf(".")));

4、进行写入到新文件里

for (String s : list) {
                bufferedWriter.write(s);
                bufferedWriter.newLine();
            }

整体代码

package com.maoteng.d3_char_buffer;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Test4 {
    /*
     *   目标  :将乱序的出师表 ,排序好放入到另一个文件中
     */
    public static void main(String[] args) {
//        1、创建字符输入流,与源文件连接
        try (
                BufferedReader bufferedReader = new BufferedReader(new FileReader("io-app\\src\\csb.txt"));
                BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("io-app/newcsb.txt"));
        ) {
//            2、读取每行数据,存入到字符串中并换行
            String len;
            List<String> list = new ArrayList<>();
            while ((len = bufferedReader.readLine()) != null) {
                list.add(len);
            }
//            指定一个大小规则
            List<String> size = new ArrayList<>();
            Collections.addAll(size,"一","二","三","四","五","陆","柒","八","九","十","十一");
            Collections.sort(list, new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                   return size.indexOf(o1.substring(0,o1.indexOf("."))) -size.indexOf(o2.substring(0,o2.indexOf(".")));
                }
            });

            System.out.println(list);
//            将文件写道另一个新的文件里
            for (String s : list) {
                bufferedWriter.write(s);
                bufferedWriter.newLine();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

总结:

排序规则不熟

就是subString截取字符串问题 和 indexof 获取索引问题

例题:

​ 张三,", “李四,”, “王五,”, "赵喜六,获取他们逗号前面的姓名

1、获取张三的索引

//        获取李四得索引
        int zhangsan = list.indexOf("张三");
        int lisi = list.indexOf("李四");
        System.out.println("张三得索引是:"+zhangsan);
        System.out.println("李四得索引是:"+lisi);

2、获取他们的姓名

//        截取 逗号前面得字符串
//        ①先获取逗号的索引   ②再进行逗号前面的截取
        for (String s : list) {
            int i = s.indexOf(",");//先获取逗号的索引
            String substring = s.substring(0, i);//②再进行逗号前面的截取
            System.out.println(substring);
        }

整体代码

package com.maoteng.d3_char_buffer;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class StringDemo02 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

        Collections.addAll(list, "张三,", "李四,", "王五,", "赵喜六,");
//        获取李四得索引
        int zhangsan = list.indexOf("张三");
        int lisi = list.indexOf("李四");
        System.out.println("张三得索引是:"+zhangsan);
        System.out.println("李四得索引是:"+lisi);

//        截取 逗号前面得字符串
//        ①先获取逗号的索引   ②再进行逗号前面的截取
        for (String s : list) {
            int i = s.indexOf(",");
            String substring = s.substring(0, i);
            System.out.println(substring);
        }

    }
}

  System.out.println("张三得索引是:"+zhangsan);
    System.out.println("李四得索引是:"+lisi);

// 截取 逗号前面得字符串
// ①先获取逗号的索引 ②再进行逗号前面的截取
for (String s : list) {
int i = s.indexOf(“,”);
String substring = s.substring(0, i);
System.out.println(substring);
}

}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值