Java文件读写操作:核心流类与方法解析

原创admin 分类:热门问答 0

Java文件读写操作:核心流类与方法解析

在Java编程中,文件读写是一项基础而关键的技能。通过文件流(Stream),我们可以高效地进行数据的输入输出操作。本文将深入探讨Java中读写文件的常用流代码案例,并对比分析不同流类的特点与使用场景。

流的基本概念与分类

在Java中,流是抽象的输入输出接口,用于表示数据的输入来源和输出目的地。流可以分为字节流和字符流。字节流以字节为单位处理数据,而字符流则以字符为单位。此外,流还可以根据数据流的方向分为输入流和输出流。

字节流与字符流的对比

特性 字节流 字符流
单位 字节 字符
编码 不考虑字符编码 考虑字符编码
核心类 InputStream, OutputStream Reader, Writer

核心类与方法

字节流

FileInputStream

FileInputStream是字节输入流的一种,用于从文件中读取数据。它继承自InputStream,提供了多种读取数据的方法。

  • int read():读取单个字节。
  • int read(byte[] b):读取多个字节到数组b中。
  • int read(byte[] b, int off, int len):从文件中读取最多len个字节到数组boff偏移量开始的位置。
  • void close():关闭流并释放资源。

FileOutputStream

FileOutputStream是字节输出流的一种,用于将数据写入文件。它继承自OutputStream,提供了多种写入数据的方法。

  • void write(int b):写入单个字节。
  • void write(byte[] b):写入整个字节数组。
  • void write(byte[] b, int off, int len):写入字节数组boffoff+len部分。
  • void flush():刷新输出流,确保所有数据都写入文件。
  • void close():关闭流并释放资源。

字符流

FileReader

FileReader是字符输入流的一种,用于从文件中读取字符。它提供了按字符读取的方法。

  • int read():读取一个字符。
  • int read(char[] cbuf, int off, int len):读取多个字符到字符数组cbufoff位置开始的地方。
  • long skip(long n):跳过并丢弃n个字符。
  • void close():关闭流并释放资源。

FileWriter

FileWriter是字符输出流的一种,用于将字符写入文件。它提供了按字符写入的方法。

  • void write(int c):写入一个字符。
  • void write(char[] cbuf, int off, int len):写入字符数组cbufoffoff+len部分。
  • void newLine():写入一个行分隔符。
  • void flush():刷新输出流,确保所有字符都写入文件。
  • void close():关闭流并释放资源。

使用场景

字节流适用于处理二进制文件,如图像、音频、视频等,因为这些文件的数据不是基于字符编码的。而字符流则适用于处理文本文件,因为它能够处理字符编码,确保文本内容的正确性。

代码案例

案例1:使用FileInputStreamFileOutputStream读写二进制文件

// 读取图片文件并写入到新的文件中
public void copyBinaryFile(String sourcePath, String targetPath) {
    try (FileInputStream fis = new FileInputStream(sourcePath);
         FileOutputStream fos = new FileOutputStream(targetPath)) {
        byte[] buffer = new byte[1024];
        int len;
        while ((len = fis.read(buffer)) != -1) {
            fos.write(buffer, 0, len);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

案例2:使用FileReaderFileWriter读写文本文件

// 读取文本文件并写入到新的文件中
public void copyTextFile(String sourcePath, String targetPath) {
    try (FileReader fr = new FileReader(sourcePath);
         FileWriter fw = new FileWriter(targetPath)) {
        char[] buffer = new char[1024];
        int len;
        while ((len = fr.read(buffer)) != -1) {
            fw.write(buffer, 0, len);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

通过上述案例,我们可以看到字节流和字符流在文件读写操作中的应用。字节流直接处理原始字节,适合于非文本文件的读写;而字符流则处理字符,适合于文本文件的读写。在实际开发中,根据不同的文件类型和需求,选择合适的流类进行操作是至关重要的。

相关文章

猜你喜欢

领取相关Java架构师视频资料

网络安全学习平台视频资料