如何将输入流转换为虚拟文件
2022-08-31 12:07:56
我有一个方法,它期望输入变量之一是java.io.File类型,但我得到的只是InputStream。另外,我无法更改该方法的签名。
如何将 InputStream 转换为文件类型,而不将文件实际写入文件系统?
我有一个方法,它期望输入变量之一是java.io.File类型,但我得到的只是InputStream。另外,我无法更改该方法的签名。
如何将 InputStream 转换为文件类型,而不将文件实际写入文件系统?
像这样的东西应该有效。请注意,为了简单起见,我使用了Java 7功能(尝试使用可关闭的资源进行块),以及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;
}
}
你不能。输入流只是一个通用的数据流,不能保证它实际上来自文件。如果有人通过读取 Web 服务创建了 InputStream,或者只是将 String 转换为 InputStream,则无法将其链接到文件。因此,您唯一能做的就是将数据从流写入临时文件(例如,使用File.createTempFile方法)并将此文件馈送到您的方法中。