Java学习笔记——Java语言基础(十八)(IO流、字节流、字节缓冲流、字符流、字符缓冲流)

一、IO流

IO流的概述:
IO流用来处理设备之间的数据传输,Java对数据的操作是通过流的方式,用于操作流的对象都在IO包中,进行输入、输出操作。
输入:也叫作读取数据
输出:也叫作写出数据

1.1 IO流的分类

根据数据的流向:
输入流:把数据从其他设备读取到内存中的流
输出流:把数据从内存中写入其他设备上的流
根据数据的类型:
字节流:以字节为单位,读写数据的流
字符流:以字符为单位,读写数据的流

1.2 流的父类

字节输入流:InputStream
字节输出流:OutputStream
字符输入流:Reader
字符输出流:Writer

二、字节流

一切文件数据(文本、图片、视频)在存储时,都是以二进制数字的形式保存,一个一个的字节形式,那么在传输的时候也一样。字节流可以传输任意数据的文件。
无论使用什么流对象进行传输,底层传输的始终是二进制数据

2.1 字节输出流OutPutStream

字节输出流OutPutStream是所有字节输出流的超类,是一个抽象类。定义了字节输出流的基本共性方法

方法:

	public void close() :关闭此输出流并释放与此流相关联的任何系统资源。
    public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。
    public abstract void write(int b) :将指定的字节输出流。
    public void write(byte[] b) :将 b.length字节从指定的字节数组写入此输出流。
    public void write(byte[] b, int off, int len) :从指定的字节数组写入len个字节,从偏移量 off 开始输出到此输出流。
2.2 文件输出流FileOutPutStream

FileOutPutStream类是文件输出流,用于将数据写出文件

写入数据的原理(内存-->硬盘) 输出
   Java程序---JVM---OS---OS调用数据的方法---把数据写入文件
2.2.1 构造方法

public FileOutputStream(File file) :创建文件输出流以写入由指定的 File对象表示的文件。
public FileOutputStream(String name) : 创建文件输出流以指定的名称写入文件。
构造方法的作用:创建一个FileOutputStream的对象,根据构造方法中传递的参数,创建一个空的文件,把FileOutputStream对象指向创建好的文件

注意:在创建一个流对象时,必须传入一个文件路径。该路径下,如果没有文件,就会创建该文件。如果有,就会将这个文件的内容清空
使用字节输出流OutPutStream中的write方法可以写入字节数据

public class Demo01 {
   
    public static void main(String[] args) throws IOException {
   
        FileOutputStream fos = new FileOutputStream("a.txt");
        //  public abstract void write(int b) :将指定的字节输出流。
        fos.write(98);
        byte[] bytes={
   98,99,100,101,102};
        //public void write(byte[] b) :将 b.length字节从指定的字节数组写入此输出流。
        fos.write(bytes);
        //public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。
        fos.write(bytes,1,2);
        /*
        那么我们想要在文件中显示100,需要写入3个字节*/
        fos.write(49);
        fos.write(48);
        fos.write(48);
        //写入字符串的方法,使用String类中的方法转为为字节数组
        String str="你好";
        fos.write(str.getBytes());
        System.out.println(Arrays.toString(str.getBytes()));//表示你好的字节数组:[-28, -67, -96, -27, -91, -67]
        //使用完流记得关闭
        fos.close();
    }
}

显示效果:
在这里插入图片描述
使用完流记得调用close方法:
(1)通知系统释放关于管理流指定文件的资源
(2)让IO流对象变成垃圾,等待垃圾回收器对其进行回收

2.2.2 追加写的构造方法

FileOutputStream(File file, boolean append) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(String name, boolean append) 创建一个向具有指定 name 的文件中写入数据的输出文件流。
其中,第一个参数和上面的构造方法相同,指向一个文件。第二个参数是追加写的开关
true:不会覆盖原文件,继续在文件的末尾追加写数据
false:创建一个新的文件,覆盖原文件
当我们需要换行的时候,不同的系统存在不一样的情况,windows系统里可以使用“\r\n”,Linux里则为“\n”。Mac系统里为"\r"
代码演示:

public class Demo02 {
   
    public static void main(String[] args) throws IOException {
   
        //追加写 第二个参数为true 不会覆盖原文件
        FileOutputStream fos = new FileOutputStream("b.txt",true);
        for (int i = 0; i < 5; i++) {
   
            fos.write(("你好"+i).getBytes());
            //使用换行符
            fos.write("\r\n".getBytes());
        }
    }
}

将程序运行两次之后,b.txt的文件内容:
在这里插入图片描述

2.3 字节输入流InPutStream

字节输入流InPutStream是字节输入流的所有类的超类,可以读取字节信息到内存中。
其中定义了字节输入流的基本共性方法
public void close() :关闭此输入流并释放与此流相关联的任何系统资源。
public abstract int read() : 从输入流读取数据的下一个字节。
public int read(byte[] b) : 从输入流中读取一些字节数,并将它们存储到字节数组 b中 。

2.4 文件字节输入流FileInPutStream

FileInPutStream是文件输入流,从文件中读取数据

读取数据的原理:硬盘---内存  输入
     Java程序---JVM---OS---OS读取数据的方法---读取文件
2.4.1 构造方法

FileInputStream(File file) : 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。
FileInputStream(String name) : 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
创建一个FileInputStream对象,会把FileInputStream对象指向构造方法中读取的文件
注意:当创建一个文件字节输入流对象时,必须传入一个文件路径,如果该文件路径不存在,就会抛出FileNotFoundException异常
使用字节输入流的read方法可以读取数据
一次读取一个字节:

public class Demo01 {
   
    public static void main(String[] args) throws IOException {
   
        //构造方法传入刚在写入的文件路径
        FileInputStream fis = new FileInputStream("a.txt");
        //public abstract int read() 读取文件中的一个字节并返回,读取到文件的末尾返回-1
        //定义一个int类型接受read方法返回的字节
        
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值