IO流总结(一)

本文详细介绍了Java中的流机制,包括字节输入流(如FileInputStream)、字节输出流(如FileOutputStream)、字符输入流(如FileReader)和字符输出流(如FileWriter),以及如何使用缓冲流提高效率和转换流进行数据格式转换。
摘要由CSDN通过智能技术生成

1.概述

流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观地进行操作

关于路径 : 绝对路径,从盘符开始的路径,是一个完整的路径

                  相对路径,相对于项目目录的路径,是一个便捷的路径

2.分类

4个大类

>InputStream(字节输入流)

>OutputStream(字节输出流)

>Reader(字符输入流)

>Writer(字符输出流)

由这4个类派生出来的子类名称都是以其父类名作为子类名后缀

3.文件流

1)FileIuputStream

概述

字节输入流,以字节的方式进行文件中内容的读取操作

压缩包,图片,视频等文件都需要使用字节流传输

常用方法
public int read() : 从输入流读取一个字节。返回读取的字节值。虽然读取了 一个字节,但    是会自动提升为 int 类型。如果已经到达流末尾,没有数据可读,则返回-1。
public int read(byte[] b) : 从输入流中读取一些字节数,并将它们存储到字节数组 b 中 。      每次最多读取 b.length 个字节。返回实际读取的字节个数。如果已经 到达流末尾,没有数    据可读,则返回-1。
public int read(byte[] b,int off,int len) :从输入流中读取一些字节 数,并将它们存储到字节      数组 b 中,从 b[off]开始存储,每次最多读取 len 个字节 。 返回实际读取的字节个数。如      果已经到达流末尾,没有数据可读,则返回-1。
public void close() :关闭此输入流并释放与此流相关联的任何系统资源。
  说明:close()方法,当完成流的操作时,必须调用此方法,释放系统资源。

2)FileReader

概述

字符输入流,一般适用于纯文本文件,用于解决读取汉字的乱码问题

常用方法
public int read() : 从输入流读取一个字符。 虽然读取了一个字符,但是会自 动提升为 int      类型。返回该字符的 Unicode 编码值。如果已经到达流末尾了,则返回- 1。
public int read(char[] cbuf) : 从输入流中读取一些字符,并将它们存储到字符数组 cbuf 中    。每次最多读取 cbuf.length 个字符。返回实际读取的字符个数。 如果已经到达流末尾,      没有数据可读,则返回-1。
public int read(char[] cbuf,int off,int len) :从输入流中读取一些字 符,并将它们存储到字符    数组 cbuf 中,从 cbuf[off]开始的位置存储。每次最多读取 len 个字符。返回实际读取的        字符个数。如果已经到达流末尾,没有数据可读,则返 回-1。
public void close() :关闭此流并释放与此流相关联的任何系统资源。
  注意:当完成流的操作时,必须调用 close()方法,释放系统资源,否 则会造成内存泄漏。

3)FileOutputSream

概述

字节输出流,用于将内存中的数据写出在硬盘中.如果文件不存在,则会自动创建,但是不会创建文件夹,如果文件夹不存在,就会报错

在构造方法中,可以传入两个参数,第一个是文件路径,第二个是写出方式

如果写出方式不传入值或者传入false,则会覆盖原来的内容

如果写出方式传入true,则会在原来的内容之后追加写出新的内容

常用方法
public void write(int b) :将指定的字节输出流。虽然参数为 int 类型四个字 节,但是只会      保留一个字节的信息写出。
public void write(byte[] b) :将 b.length 字节从指定的字节数组写入此输出流。
public void write(byte[] b, int off, int len) :从指定的字节数组写入 len 字节,从偏移量 off 开始输出到此输出流。
public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。
public void close() :关闭此输出流并释放与此流相关联的任何系统资源。
  说明:close()方法,当完成流的操作时,必须调用此方法,释放系统资源。

4)FileWriter

概述

字符输出流

常用方法
public void write(int c) :写出单个字符。
public void write(char[] cbuf) :写出字符数组。
public void write(char[] cbuf, int off, int len) :写出字符数组的某 一部分。off:数组的开始      索引;len:写出的字符个数。
public void write(String str) :写出字符串。
public void write(String str, int off, int len) :写出字符串的某一 部分。off:字符串的开始索    引;len:写出的字符个数。
public void flush() :刷新该流的缓冲。
public void close() :关闭此流。
  注意:当完成流的操作时,必须调用 close()方法,释放系统资源,否则会造成内存泄漏。

4.缓冲流

概述

用来提高效率,减少物理读取次数

在读取和写入时,会有缓存部分,调用flush()方法可以刷新缓存,将内存数据写入到磁盘中

BufferedReader
        try(
                //字节输入
                FileInputStream fis = new FileInputStream("./Assignment_day20/src/Hello.txt");
                //字节输入缓冲
                BufferedInputStream bis = new BufferedInputStream(fis);
                //字节输入
                FileReader fr = new FileReader("./Assignment_day20/src/Hello.txt");
                //字节输入缓冲
                BufferedReader br = new BufferedReader(fr);){

                String temp = null;
                while ((temp = br.readLine()) != null)
                    System.out.println(temp);
        }catch (Exception e) {
            e.printStackTrace();
        }
BufferedWriter
        try(
                //字节输出
                FileOutputStream fos = new FileOutputStream("./Assignment_day20/src/test.txt");
                //字节输出缓冲
                BufferedOutputStream bos = new BufferedOutputStream(fos);
                //字符输出
                FileWriter fw = new FileWriter("./Assignment_day20/src/test.txt");
                //字符输出缓冲
                BufferedWriter bw = new BufferedWriter(fw);
                ){
                bw.write("我是迪奥!");
                //换行方法
                bw.newLine();
                bw.write("jojo");
                bw.flush();
        }catch (Exception e){
            e.printStackTrace();
        }

5.转换流

概述

转换流是指将字节流向字符流进行转换,主要有InputStreamReader和OutputStreamWriter

InputStreamReader 将字节流输入流转换为字符输入流

OutputStreamWriter 将字节输出流转换为字符输出流

例子
        try(
            //字节输入流
            FileInputStream fis = new FileInputStream("./Assignment_day20/src/test.txt");
            //转换为字符流
            InputStreamReader isr = new InputStreamReader(fis);
            //字符输入流缓冲
            BufferedReader br = new BufferedReader(isr);
                ){
            System.out.println(br.readLine());
        }catch (Exception e){
            e.printStackTrace();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值