808笔记---小白学Java

本文详细介绍了Java中IO流的分类,包括输入流和输出流,以及字节流(如FileInputStream和FileOutputStream)与字符流(如FileReader和FileWriter)的区别和使用方法。通过实例演示展示了如何操作字节和字符数据流,以及它们在文件操作中的关键作用。
摘要由CSDN通过智能技术生成

IO流

IO流的分类

根据数据流向:输入流和输出流

  • 输入流:把数据从硬盘上读取到内存中
  • 输出流:把数据从内存中写入到硬盘上

根据操作数据单位:字节流和字符流

  • 字节流:以字节为单位读写(文本、音频、图片、视频等)
  • 字符流:以字符为单位读写(主要用于文本)

字节流

  • 字节输入流:InputStream
  • 字节输出流:OutputStream

字节输入流:InputStream

该抽象类是输入字节流的基类,可以读取字节信息到内存中。

FileInputStream类

构造方法

  • FileInputStream(File file) : 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。

  • FileInputStream(String name): 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。

常用方法

返回值类型方法名含义
voidclose()关闭此输入流并释放与此流相关联的任何系统资源。
abstract intread()从输入流中读取一个字节数据,并将读取到的数据返回;当读取到文件的末尾时返回-1
intread(byte[] b)从输入流中读取一个字节数组的数据,返回实际读取到的有效字节数量;读取到文件的末尾返回-1
intread(byte[] b, int off, int len)从输入流中读取len个字节,然后将读取到的字节从off位置开始放置到字节数组中,len不可以超出字节数组的长度;读取到文件的末尾返回-1
longskip(long n)跳过输入流的n个字节

示例

package com.qfedu.demo;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

/**
 * @Author pengyu
 * @Date 2022/8/8 11:24
 */
public class Demo01 {
    public static void main(String[] args) throws IOException {
        //该路径下有个txt文本,内容是:我是博哥小迷弟
        //创建一个file对象
        File file = new File("D:/aaa/3.txt");
        //创建一个fileInputStream对象输入流来操作file对象
        FileInputStream fileInputStream = new FileInputStream(file);
        //使用BufferedInputStream类,创建一个内部缓冲区数组
        BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);

        //定义一个字节数组来放读取的字节
        byte[] b = new byte[1024];

        int lenght;
        //我们通过BufferedInputStream的父类来调用read(byte[] b) ,
        // 从该输入流读取最多 byte.length个字节的数据到字节数组。 
        while ((lenght = bufferedInputStream.read(b)) != -1) {
            System.out.println(new String(b,0,lenght));
        }

        //关闭流,释放资源,原则先进后关,后进先关
        bufferedInputStream.close();
        fileInputStream.close();

    }
}

字节输出流:OutputStream

OutputStream是所有字节输出的顶层父类

FileOutputStream类

FileOutputStream是OutputStream中一个常用的子类,他可以关联一个文件,用于将数据写出到文件。

构造方法

  • FileOutputStream(File file) :创建文件输出流以写入由指定的 File对象表示的文件。
  • FileOutputStream(String name):创建文件输出流以指定的名称写入文件。

当一个路径的文件存在时,会覆盖原来的内容

常用方法

返回值类型方法名含义
voidwrite(byte[] b)写出一个字节数组的数据
voidwrite(byte[] b, int off, int len)从字节数组中的off位置开始写出,写出len个字节
voidwrite(int b)一次写入一个字节数据
voidclose()关闭此输出流并释放与流相关联的任何系统资源。
voidflush()刷新此输出流,并强制将任何缓冲的输出字节写入流

示例

package com.qfedu.demo;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @Author pengyu
 * @Date 2022/8/8 19:31
 */
public class Demo02 {
    public static void main(String[] args) throws IOException {
        File file = new File("D:/aaa/4.txt");
        if (!file.exists()) {
            file.createNewFile();
        }
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
        String str = "台娃,不要在呱呱呱了。";
        byte[] bytes = str.getBytes();
        bos.write(bytes);
        //刷新
        bos.flush();
        //关闭流
        bos.close();
    }
}

字符流(用于文本)

字符输入流:Reader

java.io.Reader抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。

FileReader类

java.io.FileReader 类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。

构造方法

  • FileReader(File file): 创建一个新的 FileReader ,给定要读取的File对象。
  • FileReader(String fileName): 创建一个新的 FileReader ,给定要读取的文件的名称。

常用方法

返回值方法名含义
intread()每次可以读取一个字符的数据,提升为int类型,读取到文件末尾,返回-1
intread(char buf[])每次读取一个字符数组的数据读取到buf中,返回读取到的有效字符个数,读取到末尾时,返回-1
intread(char cbuf[], int offset, int length)从输入流中读取len个字符,然后将读取到的字符从字符数组的off位置开始放置,len不可以超出字符数组的长度;读取到文件末尾返回-1

示例

package com.qfedu.demo;

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

/**
 * @Author pengyu
 * @Date 2022/8/8 19:43
 */
public class Demo03 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(new File("D:/aaa/4.txt")));
        char[] chars = new char[4 * 1024];
        int length;
        while ((length = br.read(chars)) != -1) {
            System.out.println(new String(chars, 0, length));
        }
        br.close();
        //控制台输出:台娃,不要在呱呱呱了。
    }
}

字符输出流:Writer

java.io.Writer抽象类是表示用于读取Writ字符流的所有类的超类,可以读取字符信息到内存中。

FileWriter类

java.io.FileWriter 类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。

构造方法

  • FileWriter(File file): 创建一个新的 FileWriter,给定要读取的File对象。
  • FileWriter(String fileName): 创建一个新的 FileWriter,给定要读取的文件的名称。

常用方法

返回值方法名含义
voidwrite(int c)写一个字符
voidwrite(char[] cbuf, int off, int len)写入字符数组的一部分。
voidwrite(String str, int off, int len)写一个字符串的一部分。

示例

package com.qfedu.demo;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

/**
 * @Author pengyu
 * @Date 2022/8/8 20:02
 */
public class Demo04 {
    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new FileWriter(new File("D:/aaa/5.txt")));
        String str = "啦啦啦啦啦,我是卖报的小行家。";
        char[] chars = str.toCharArray();
        bw.write(chars);
        bw.close();
        //该路径下自动生成5.txt文本,内容为啦啦啦啦啦,我是卖报的小行家。
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值