是否有可能从InputStream创build一个File对象

有什么办法从java.io.InputStream创build一个java.io.File对象?

我的要求是从RAR读取文件。 我不是要写一个临时文件,我有一个文件,我正在尝试阅读RAR档案。

您需要创build新的文件并将InputStream内容复制到该文件中:

 File file = //... OutputStream outputStream = new FileOutputStream(file); IOUtils.copy(inputStream, outputStream); outputStream.close(); 

我正在使用方便的IOUtils.copy()来避免手动复制stream。 它也有内置的缓冲。

首先创build一个临时文件。

  File tempFile = File.createTempFile(prefix, suffix); tempFile.deleteOnExit(); FileOutputStream out = new FileOutputStream(tempFile); IOUtils.copy(in, out); return tempFile; 

在一行中:

 FileUtils.copyInputStreamToFile(inputStream, file); 

(org.apache.commons.io)

如果你不想使用其他库,这里有一个简单的函数来将InputStream转换为OutputStream

 public static void copyStream(InputStream in, OutputStream out) throws IOException { byte[] buffer = new byte[1024]; int read; while ((read = in.read(buffer)) != -1) { out.write(buffer, 0, read); } } 

现在,您可以使用FileOutputStream轻松地将Inputstream写入文件 –

 FileOutputStream out = new FileOutputStream(outFile); copyStream (inputStream, out); out.close();