如何将InputStream转换为虚拟文件

我有一个方法,期望inputvariables之一是java.io.Filetypes,但我得到的只是InputStream。 我不能改变方法的签名。 如何将InputStream转换为Filetypes,然后将文件写入文件系统?

像这样的东西应该工作。 请注意,为了简单起见,我已经使用了Java 7function(尝试使用可closures资源的块)以及来自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; } } 

你不能。 inputstream只是一个通用的数据stream,并不能保证它实际上源于一个文件。 如果有人通过读取Web服务创buildInputStream,或只是将String转换为InputStream,则无法将其链接到文件。 所以你唯一可以做的就是将数据从stream中写入临时文件(例如使用File.createTempFile方法),并将这个文件提供给你的方法。