在 Java 里,你可以借助文件流来进行文件的读取与写入操作。文件流主要分为字节流和字符流。字节流以字节为单位处理数据,适用于处理二进制文件,像图片、音频等;字符流以字符为单位处理数据,适合处理文本文件。

读取文件

1. 使用字节流读取文件

你可以使用 FileInputStream 来读取文件的字节数据。以下是一个示例代码:

import java.io.FileInputStream;
import java.io.IOException;

public class ReadFileUsingByteStream {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("test.txt")) {
            int data;
            while ((data = fis.read()) != -1) {
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 使用字符流读取文件

使用 FileReader 读取文本文件内容,代码如下:

import java.io.FileReader;
import java.io.IOException;

public class ReadFileUsingCharacterStream {
    public static void main(String[] args) {
        try (FileReader fr = new FileReader("test.txt")) {
            int data;
            while ((data = fr.read()) != -1) {
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

写入文件

1. 使用字节流写入文件

使用 FileOutputStream 往文件中写入字节数据,示例如下:

import java.io.FileOutputStream;
import java.io.IOException;

public class WriteFileUsingByteStream {
    public static void main(String[] args) {
        try (FileOutputStream fos = new FileOutputStream("test.txt")) {
            String content = "Hello, World!";
            byte[] bytes = content.getBytes();
            fos.write(bytes);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 使用字符流写入文件

使用 FileWriter 向文本文件写入内容,代码如下:

import java.io.FileWriter;
import java.io.IOException;

public class WriteFileUsingCharacterStream {
    public static void main(String[] args) {
        try (FileWriter fw = new FileWriter("test.txt")) {
            String content = "Hello, World!";
            fw.write(content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

常见的文件操作方法

  • 文件读取方法
    • read():从输入流读取一个字节或字符,返回读取的字节或字符的 ASCII 码值,到达文件末尾返回 -1。
    • read(byte[] b)read(char[] cbuf):从输入流读取一定数量的字节或字符到数组中,返回实际读取的字节或字符数。
    • read(byte[] b, int off, int len)read(char[] cbuf, int off, int len):从输入流读取最多 len 个字节或字符到数组中,从 off 位置开始存储,返回实际读取的字节或字符数。
  • 文件写入方法
    • write(int b)write(int c):向输出流写入一个字节或字符。
    • write(byte[] b)write(char[] cbuf):将字节数组或字符数组中的内容写入输出流。
    • write(byte[] b, int off, int len)write(char[] cbuf, int off, int len):将字节数组或字符数组中从 off 位置开始的 len 个字节或字符写入输出流。
    • write(String str):将字符串写入输出流(仅字符流有此方法)。
  • 文件关闭方法
    • close():关闭流并释放相关资源。在 Java 7 及以后版本,建议使用 try-with-resources 语句来自动关闭流,避免资源泄漏。

这些操作方法能满足大多数文件读取和写入的需求。在实际应用中,你可以根据文件类型和需求选择合适的流和方法。