如何将 InputStream 转换为虚拟文件

新手上路,请多包涵

我有一个方法期望输入变量之一是 java.io.File 类型,但我得到的只是 InputStream。另外,我无法更改方法的签名。

如何在不实际将文件写入文件系统的情况下将 InputStream 转换为 File 类型?

原文由 Ram 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

这样的事情应该有效。请注意,为简单起见,我使用了 Java 7 功能(具有可关闭资源的 try 块)和来自 Apache commons-io 的 IOUtils。如果你不能使用那些它会更长一点,但同样的想法。

 import org.apache.commons.io.IOUtils;

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

public class StreamUtil {

    public static final String PREFIX = "stream2file";
    public static final String SUFFIX = ".tmp";

    public static File stream2file (InputStream in) throws IOException {
        final File tempFile = File.createTempFile(PREFIX, SUFFIX);
        tempFile.deleteOnExit();
        try (FileOutputStream out = new FileOutputStream(tempFile)) {
            IOUtils.copy(in, out);
        }
        return tempFile;
    }

}

原文由 cobbzilla 发布,翻译遵循 CC BY-SA 3.0 许可协议

你不能。输入流只是一个通用的数据流,不能保证它实际上来自一个文件。如果有人通过读取 Web 服务创建了 InputStream 或者只是将 String 转换为 InputStream,则无法将其链接到文件。因此,您唯一可以做的就是将流中的数据实际写入一个临时文件(例如使用 File.createTempFile 方法)并将该文件提供给您的方法。

原文由 Jan Thomä 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题