Можно ли создать файловый объект из InputStream
есть ли способ создать java.io.File
объект java.io.InputStream
?
мое требование-это чтение файла из RAR . Я не пытаюсь написать временный файл, у меня есть файл внутри архива RAR, который я пытаюсь прочитать.
6 ответов:
вам нужно создать новый файл и скопировать содержимое из
InputStream
на этот файл:File file = //... OutputStream outputStream = new FileOutputStream(file); IOUtils.copy(inputStream, outputStream); outputStream.close();
Я использую удобный
IOUtils.copy()
чтобы избежать ручного копирования потоков. Также он имеет встроенную буферизацию.
создать временный файл.
File tempFile = File.createTempFile(prefix, suffix); tempFile.deleteOnExit(); FileOutputStream out = new FileOutputStream(tempFile); IOUtils.copy(in, out); return tempFile;
если вы не хотите использовать другую библиотеку, вот простая функция для преобразования
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); } }
теперь вы можете легко написать
Inputstream
в файл с помощьюFileOutputStream
-FileOutputStream out = new FileOutputStream(outFile); copyStream (inputStream, out); out.close();
начиная с Java 7, Вы можете сделать это в одну строку, даже без использования каких-либо внешних библиотек:
Files.copy(inputStream, outputPath, StandardCopyOption.REPLACE_EXISTING);
посмотреть API docs.
Если вы используете Java версии 7 или выше, вы можете использовать try-with-resources правильно закрыть
FileOutputStream
. Следующий код использоватьIOUtils.copy()
С commons-io.public void copyToFile(InputStream inputStream, File file) throws IOException { try(OutputStream outputStream = new FileOutputStream(file)) { IOUtils.copy(inputStream, outputStream); } }