Java IO流

本文介绍了Java中的File类及其使用,包括文件和目录的创建、删除、重命名等操作。File类不涉及文件内容的读写,但常作为IO流的参数。详细阐述了IO流的分类,如节点流、缓冲流、转换流,以及标准输入输出流、打印流和对象流的使用。此外,还提到了RandomAccessFile,它既能读也能写,可用于随机访问文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

File

概况

在这里插入图片描述

使用

  • File类的一个对象,代表一个文件或一个文件目录(文件夹)

  • File类声明在java.io包下。

  • File类中涉及到关于文件或文件目录的创建,删除,重命名,修改时间,文件大小等方法,并未涉及到写入或读取文件内容的操作,如果需要读取或写入文件内容,必须使用IO流来完成。

  • 后续File类的对象常会作为参数传递到流的构造器中,指明读取或写入的“终点”。

  • 创建File类的实例

    • File(String filePath)
    • File(String parentPath, String childPath)
    • File(File parentFile, String childPath)
  • 路径

    • 相对路径:相较于某个路径下,指明的路径。
    • 绝对路径:包含盘符在内的文件或文件目录的路径。
  • 路径分隔符

    • windows:\\
    • unix:/

常用方法

在这里插入图片描述
在这里插入图片描述

IO流

原理

在这里插入图片描述

分类

在这里插入图片描述
在这里插入图片描述

体系结构

  • 抽象基类
    • InputStream
    • OutputStream
    • Reader
    • Writer
  • 节点流(文件流)
    • FileInputStream(read (byte[] buffer))
    • FileOutputStream(write (byte[] buffer, 0, len))
    • FileReader(read (char[] cbuf))
    • FileWriter(write (char[] cbuf, 0, len))
  • 缓冲流(处理流的一种)
    • BufferedInputStream(read (byte[] buffer))
    • BufferedOutputStream(write (byte[] buffer, 0, len) / flush())
    • BufferedReader(read (char[] cbuf) / readLine())
    • BufferedWriter(write (char[] cbuf, 0, len) / flush())

节点流(文件流)

  • read()的理解:返回读入的一个字符,如果达到文件末尾,返回-1。

  • 异常的处理:为了保证流资源一定可以执行关闭操作,需要使用try-catch-finally处理。

  • 读入的文件一定要存在,否则会报FileNotFoundException。

  • 使用read()的重载方法

    • File类的实例化
    • FileReader流的实例化
    • 读入的操作
    • 资源的关闭
  • 从内存中写出数据到硬盘的文件里

    • 步骤

      • 提供File类的对象,指明写出的文件
      • 提供FileWriter的对象,用于数据的写出
      • 写出的操作
      • 流资源的关闭
    • 输出操作,对应的File可以不存在,并不会报异常。

    • File对应的硬盘中的文件如果不存在,在输出的过程中,会自动创建此文件。

    • File对应的硬盘中的文件如果存在

      • 如果流使用的构造器是:FileWriter(file, false) / FileWriter(file):对原有文件的覆盖。
      • 如果流使用的构造器是:FileWriter(file, true):不会对原文件进行覆盖,而是增加内容。
  • 不能使用字符流来处理图片等字节数据。

  • 对于文本文件(.txt,.java,.c,.cpp),使用字符流处理。对于非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt…),使用字节流处理。

缓冲流

  • 作用:提高流的读取,写入的速度。提高读写速度的原因:内部提供了一个缓冲区。
  • 造流先造内层再造外层,关流先关外层再关内层。(关闭外层流的同时,内层流也会自动的进行关闭。关于内层流的关闭,我们可以省略)
  • 处理流:“套装”在已有的流的基础上。

转换流

作用:提供字节流与字符流之间的转换
在这里插入图片描述

  • InputStreamReader:将一个字节的输入流转换为字符的输入流

  • OutputStreamWriter:将一个字符的输出流转换成字节的输出流

  • 编码:字符数组,字符串 ——> 字节,字节数组

  • 解码:字节,字节数组 ——> 字符数组,字符串

  • 具体使用哪个字符集,取决于文件dbcp.txt保存时使用的字符集。

  • 字符集
    在这里插入图片描述

标准输入,输出流

在这里插入图片描述

  • System.in:标准的输入流,默认从键盘输入
  • System.out:标准的输出流,默认从控制台输出
  • System类的setIn(InputStream is) / setOut(PrintStream ps)方式重新指定输入和输出的流。

打印流

在这里插入图片描述

数据流

在这里插入图片描述

  • 作用:用于读取或写出基本数据类型的变量或字符串
  • 处理异常的话,仍然使用try-catch-finally
  • 读取不同类型的数据的顺序要与当初写入文件时,保存的数据的顺序一致。

对象流

在这里插入图片描述

  • 举例:Person需要 满足如下要求,方可序列化
    • 需要实现接口:Serializable
    • 当前类提供一个全局常量:serialVersionUID
    • 除了当前Person类需要实现Seriallizable接口以外,还必须保证其内部所有属性也必须是可序列化的(默认情况下,基本数据类型可序列化)

随机存取文件流

在这里插入图片描述

  • RandomAccessFile直接继承于java.lang.Object类,实现了DataInput和DataOutput接口,既可以作为一个输入流,也可以作为输出流。
    在这里插入图片描述
  • 如果RandomAccessFile作为输出流时,写出到的文件如果不存在,则在执行过程中自动创建。如果写出到的文件存在,则会对原有文件内容进行覆盖。(默认情况下,从头覆盖)
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值