Java.io.File
からJava.io.InputStream
オブジェクトを作成する方法はありますか?
私の要件は、RARからファイルを読み取ることです。一時ファイルを書き込もうとはしていません。RARアーカイブ内に読み取りしようとしているファイルがあります。
新しいファイルを作成し、InputStream
からそのファイルにコンテンツをコピーする必要があります。
File file = //...
try(OutputStream outputStream = new FileOutputStream(file)){
IOUtils.copy(inputStream, outputStream);
} catch (FileNotFoundException e) {
// handle exception here
} catch (IOException e) {
// handle exception here
}
便利な IOUtils.copy()
を使用して、ストリームの手動コピーを回避しています。また、バッファリングが組み込まれています。
一行で:
FileUtils.copyInputStreamToFile(inputStream, file);
(org.Apache.commons.io)
最初に一時ファイルを作成します。
File tempFile = File.createTempFile(prefix, suffix);
tempFile.deleteOnExit();
FileOutputStream out = new FileOutputStream(tempFile);
IOUtils.copy(in, out);
return tempFile;
Java 7以降、外部ライブラリを使用しなくても1行で実行できます。
Files.copy(inputStream, outputPath, StandardCopyOption.REPLACE_EXISTING);
APIドキュメント を参照してください。
他のライブラリを使用したくない場合、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以降を使用している場合は、 try-with-resources を使用してFileOutputStream
を適切に閉じることができます。次のコードは IOUtils.copy()
from commons-io を使用します。
public void copyToFile(InputStream inputStream, File file) throws IOException {
try(OutputStream outputStream = new FileOutputStream(file)) {
IOUtils.copy(inputStream, outputStream);
}
}