Java 使用 Stream I/O(InputStream 和 OutputStream)进行文件的读写操作,InputStream 用于读取字节流数据,而 OutputStream 用于写入字节流数据。常用的实现类有 FileInputStream 和 FileOutputStream,它们通过字节流进行文件操作,适合处理二进制文件。示例代码中,使用 FileInputStream 从文件读取数据并存入 byte[] 缓冲区,使用 FileOutputStream 写入数据到文件。本文主要介绍Java中,使用Stream I/O(InputStream/OutputStream)对文件进行读取和写入操作的方法,以及使用的示例代码。

1、使用Stream I/O读文件

使用 Stream I/O 读文件时,InputStream 及其子类(如 FileInputStream)提供了字节流读取功能。FileInputStream 从文件中读取字节数据,通过 read() 方法逐字节读取或通过 read(byte[] buffer) 方法一次读取多个字节到缓冲区。读取的数据可以存储在字节数组中,适合处理二进制文件或文本文件的字节流。常见做法是使用 try-with-resources 自动关闭流。

要打开文件进行读取,可以使用 newInputStream(Path, OpenOption...)方法。此方法返回一个无缓冲的输入流,用于从文件中读取字节。

Path file = Paths.get("src/logfile.txt"); ;
try (InputStream in = Files.newInputStream(file);
BufferedReader reader =
new BufferedReader(new InputStreamReader(in))) {
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException x) {
System.err.println(x);
}

2、使用Stream I/O写文件

使用 Java 的 Stream I/O (OutputStream 类及其子类) 写文件时,通常使用 FileOutputStream 来创建文件输出流,使用 write() 方法将字节数据写入文件。可以通过 FileOutputStream 指定文件路径,如果文件不存在,则会创建新文件;若文件已存在,则会覆盖原有内容。为了提高效率,可以将数据写入字节数组后进行批量写入。常用的流操作也可以通过 BufferedOutputStream 包装以提高性能。

可以使用该newOutputStream(Path, OpenOption...)方法创建文件,附加到文件或写入文件 。此方法打开或创建用于写入字节的文件,并返回未缓冲的输出流。

该方法采用可选OpenOption参数。如果未指定打开选项,并且文件不存在,则会创建一个新文件。如果文件存在,它将被截断。此选项等效于使用CREATETRUNCATE_EXISTING选项调用方法。

以下示例打开一个日志文件。如果该文件不存在,则会创建它。如果文件存在,则将其打开以进行追加。

import static java.nio.file.StandardOpenOption.*;
import java.nio.file.*;
import java.io.*;
public class LogFileTest {
  public static void main(String[] args) {
    // Convert the string to a
    // byte array.
    String s = "Hello World! ";
    byte data[] = s.getBytes();
    Path p = Paths.get("./logfile.txt");
    try (OutputStream out = new BufferedOutputStream(
      Files.newOutputStream(p, CREATE, APPEND))) {
      out.write(data, 0, data.length);
    } catch (IOException x) {
      System.err.println(x);
    }
  }
}

相关文档https://docs.oracle.com/javase/tutorial/essential/io/file.html

推荐文档