Java 类中的 FileInputStream 和 FileOutputStream 有什么用?

java 8object oriented programmingprogramming更新于 2025/9/19 21:32:17

Java 提供 I/O 流来读写数据,其中 Stream 表示输入源或输出目标,输出目标可以是文件、I/O 设备或其他程序等。

有两种类型的流可用 −

  • InputStream − 用于从源读取(顺序)数据。
  • OutputStream − 用于将数据写入目标。

FileInputStream

此类从特定文件读取数据(逐字节)。它通常用于读取包含原始字节的文件内容,例如图像。

要使用此类 − 读取文件内容

  • 首先,您需要通过传递一个 String 变量或 File 对象来实例化此类,该变量或对象表示要读取的文件的路径。
FileInputStream inputStream = new FileInputStream("file_path");
或者,
File file = new File("file_path");
FileInputStream inputStream = new FileInputStream(file);
  • 然后使用 read() 方法的任一变体 − 读取指定文件的内容
    • int read() −该方法只是从当前 InputStream 读取数据,并逐字节返回读取的数据(以整数格式)。

      如果到达文件末尾,此方法返回 -1。

    • int read(byte[] b) − 此方法接受一个字节数组作为参数,并将当前 InputStream 的内容读取到给定的数组中

      此方法返回一个表示总字节数的整数,如果到达文件末尾,则返回 -1。

    • int read(byte[] b, int off, int len) −此方法接受一个字节数组、其偏移量 (int) 和长度 (int) 作为参数,并将当前 InputStream 的内容读取到给定数组中。

    • 此方法返回一个表示总字节数的整数,如果到达文件末尾,则返回 -1。

示例

假设目录 D:/images

中有以下图像

以下程序使用 FileInputStream 读取上述图像的内容。

示例

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamExample {
   public static void main(String args[]) throws IOException {
      //创建 File 对象
      File file = new File("D:/images/javafx.jpg");
      //创建 FileInputStream 对象
      FileInputStream inputStream = new FileInputStream(file);
      //创建字节数组
      byte bytes[] = new byte[(int) file.length()];
      //将数据读入字节数组
      int numOfBytes = inputStream.read(bytes);
      System.out.println("Data copied successfully...");
   }
}

输出

Data copied successfully...

FileOutputStream

它将数据逐字节写入特定文件或文件描述符。它通常用于写入原始字节文件的内容,例如图像。

要使用此类 − 写入文件内容

  • 首先,您需要通过传递一个字符串变量或一个 File 对象(表示要读取的文件路径)来实例化此类。
FileOutputStream outputStream = new FileOutputStream("file_path");
或者,
File file = new File("file_path");
FileOutputStream outputStream = new FileOutputStream (file);

您还可以通过传递 FileDescriptor 对象来实例化 FileOutputStream 类。

FileDescriptor descriptor = new FileDescriptor();
FileOutputStream outputStream = new FileOutputStream(descriptor);
  • 然后使用 write() 方法的任一变体将数据写入指定文件 −
    • int write(int b) − 此方法接受单个字节并将其写入当前 OutputStream。
    • int write(byte[] b) − 此方法接受字节数组作为参数,并将其中的数据写入当前 OutputStream。
    • int write(byte[] b, int off, int len) −此方法接受一个字节数组、其偏移量 (int) 和长度 (int) 作为参数,并将其内容写入当前的 OutputStream。

示例

假设我们在目录 D:/images

中有以下图像

以下程序读取上述图像的内容,并使用 FileOutputStream 类将其写回另一个文件。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileInputStreamExample {
   public static void main(String args[]) throws IOException {
      //创建 File 对象
      File file = new File("D:/images/javafx.jpg");
      //创建 FileInputStream 对象
      FileInputStream inputStream = new FileInputStream(file);
      //创建字节数组
      byte bytes[] = new byte[(int) file.length()];
      //将数据读入字节数组
      int numOfBytes = inputStream.read(bytes);
      System.out.println("数据复制成功...");
      //创建 FileInputStream 对象
      FileOutputStream outputStream = new FileOutputStream("D:/images/output.jpg");
      //将输出流的内容写入文件
      outputStream.write(bytes);
      System.out.println("Data written successfully...");
   }
}

输出

Data copied successfully...
Data written successfully...

如果您验证给定的路径,您可以观察生成的图像 −


相关文章