你想要 FileFileInputStream 转成 InputStream 在 Java 中其实很简单,因为 FileInputStream 本身就实现了 InputStream 接口。下面我整理几种常见的写法和场景:


1️⃣ 直接使用 FileInputStream

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.IOException;

public class FileToInputStreamExample {
    public static void main(String[] args) throws IOException {
        File file = new File("example.txt");

        // FileInputStream 本身就是 InputStream
        InputStream inputStream = new FileInputStream(file);

        // 使用 inputStream
        int data;
        while ((data = inputStream.read()) != -1) {
            System.out.print((char) data);
        }

        inputStream.close();
    }
}

说明FileInputStream 直接赋值给 InputStream 就可以,不需要额外转换。


2️⃣ 如果已有 FileInputStream

FileInputStream fis = new FileInputStream("example.txt");
InputStream is = fis;  // 直接赋值

  • FileInputStream 本身就是 InputStream,所以无需额外操作。

3️⃣ 将 File 转为 ByteArrayInputStream(在内存中处理)

如果你需要把文件内容转为 内存中的 InputStream

import java.io.*;

File file = new File("example.txt");
byte[] fileContent = new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(fileContent);
fis.close();

// 转成 InputStream
InputStream inputStream = new ByteArrayInputStream(fileContent);

  • 适用于需要重复读取文件内容的场景。
  • 注意:大文件不要直接读入内存,会消耗大量 RAM。

4️⃣ 使用 NIO 的方式(Java 7+)

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;

byte[] bytes = Files.readAllBytes(Paths.get("example.txt"));
InputStream inputStream = new ByteArrayInputStream(bytes);

  • 功能同第 3 种,代码更简洁。
  • 注意大文件内存消耗。

✅ 总结

  • 最直接方式FileInputStream fis = new FileInputStream(file); InputStream is = fis;
  • 需要在内存中多次读取:可以用 ByteArrayInputStream
  • 避免内存问题:直接使用 FileInputStream 流式处理。