IO流

流的类图

分类

1.按数据流向

  • 输入流
  • 输出流
  1. 按数据类型
  • 字节流
  • 字符流

IO流常用基类

  • 字节流的抽象基类:InputStream,OutputStream
  • 字符流的抽象基类:Reader,Writer
    这四个类的子类都以他们为名字结尾
    由于他们都是抽象的类,无法实例化,因此需要寻找他们的子类

FileOutputStream 写入/输出数据字节流

构造方法

FileOutputStream(File file) 参数为File类型的对象
FileOutputStream(File file,boolean append) 参数为File类型的对象,若append为true,则在文件末尾继续写
FileOutputStream(String name) 参数为路径

写入数据

-步骤:1. 创建流对象 2. 写数据 3.释放资源
public void write(byte[] b) 将字节数组写入文件
public void write(byte[] b, int off, int len) 将字节数组的一部分写入文件,从off开始,写len个
public void write(int b) 写一个字节,根据编码表找到对应字符,如97对应a

实现换行

write("\n".getBytes()); 写入换行符 “\n” 的字节
注意:可能通过某些软件打开会发现没有换行,是因为不同操作系统的换行符不同,但高级记事本软件可以识别任意换行符

异常处理

标准写法

FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("fos2");
            fos.write("Java".getBytes());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(fos!=null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

FileInputStream 字节流读入数据

构造方法

FileInputStream(File file) 参数为File类型的对象
FileInputStream(String name) 参数为路径

读入数据

public int read() 从该输入流读取一个字节的数据,如果返回是-1,则读完了
public int read(byte[] b) 一次读一个字节数组的数据,返回读到的字节个数

计算机如何识别中文?

在计算机中,中文占两个字节,第一个字节一定是负数

自带数组的IO流

BufferedOutputStream 自带缓冲区的流,BufferedInputStream 自带缓冲区的流

构造函数

public BufferedInputStream(InputStream in) 创造默认大小的流
public BufferedInputStream(InputStream in,int size) 创建指定大小的流
public BufferedOutputStream(OutputStream out) 创造默认大小的流
public BufferedOutputStream(OutputStream out,int size) 创建指定大小的流
为什么要传递一个流对象,而不传递一个具体的文件或文件路径呢?
此流仅仅提供缓冲区,真正读写还需要基本的流对象实现

OutputStreamWriter 写入/输出数据字符流,从字节流到字符流的桥

构造函数

public OutputStreamWriter (OutputStream out) 参数为OutputStream 对象,可以用子类对象入FileOutputStream
public OutputStreamWriter (OutputStream out,String charsetName) charsetName 为编码名称

方法

public void write(int c) 写一个字符
public void write(char[] cbuf) 写一个字符数组
public void write(char[] cbuf,int odd,int len) 写一个字符数组的一部分
public void write(String str ) 写一个字符串
public void write(String str,int odd,int len) 写一个字符串的一部分
public void flush() 刷新

InputStreamReader 读取数据字符流,从字节流到字符流的桥

构造函数

public InputStreamReader (InputStream in) 参数为InputStream 对象,可以用子类对象入FileInputStream
public InputStreamReader (InputStream in,String charsetName) charsetName 为编码名称

方法

public int read(int c) 读一个字符,没读到返回-1
public int read(char[] chs) 读一个字符数组,结果在chs数组中,返回读到的长度,没读到返回-1

FileWriter 和FileReader

在使用本地默认编码表时,使用这两个字符流的类
FileWriter 继承 OutputStreamWriter ,FileReader 继承 InputStreamReader ,使用方法如上

字符缓冲流BufferedWriter和BufferedReader

特殊功能

BufferedWriter : public void newLine() 产生一个新的行
BufferedReader : public String readLine() 一次读取一行,将读到的内容以String 返回,若没有读到,返回null

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、IO流 1.1、概述 之前学习的File类它只能操作文件或文件夹,并不能去操作文件中的数据。真正保存数据的是文...
    Villain丶Cc阅读 2,800评论 0 5
  • IO简单概述 IO解决问题 : 解决设备与设备之间的数据传输问题(硬盘 -> 内存 内存 -> 硬盘) 读和写文...
    奋斗的老王阅读 3,557评论 0 53
  • # 3.1 File # ## 3.1.1 File基本概念 ## 1.基本概念 -File类用于表示文件(目录)...
    闫子扬阅读 574评论 0 0
  • 标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流等等,java中将输入输出抽象称为流,就好...
    navy_legend阅读 809评论 0 0
  • Java中是通过流的方式对数据进行操作,用于操作流的类都在IO包中,IO流用来处理设备之间的数据传输。IO流按照流...
    阿Q说代码阅读 1,629评论 0 1

友情链接更多精彩内容