首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将InputStream转换为虚拟文件

如何将InputStream转换为虚拟文件
EN

Stack Overflow用户
提问于 2010-12-01 02:17:05
回答 2查看 103.6K关注 0票数 84

我有一个方法,它期望输入变量中的一个是java.io.File类型的,但我得到的只是InputStream类型。此外,我不能更改该方法的签名。

如何将InputStream转换为文件类型,而不实际将文件写入文件系统?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-16 11:58:05

像这样的东西应该行得通。请注意,为了简单起见,我使用了Java7特性(带有可关闭资源的try块)和Apache commons-io中的IOUtils。如果你不能使用这些,它会更长一点,但相同的想法。

代码语言:javascript
复制
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;
    }

}
票数 126
EN

Stack Overflow用户

发布于 2010-12-01 02:22:58

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

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4317035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档