web-dev-qa-db-ja.com

InputStreamを仮想ファイルに変換する方法

入力変数の1つがJava.io.File型であると想定するメソッドがありますが、取得できるのはInputStreamのみです。また、メソッドの署名を変更することはできません。

実際にファイルシステムにファイルを書き込むことなく、InputStreamをファイルタイプに変換するにはどうすればよいですか?

72
Ram

このような何かが動作するはずです。簡単にするために、私は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;
    }

}
114
cobbzilla

できません。入力ストリームは単なるデータの汎用ストリームであり、実際にファイルから発信されたという保証はありません。誰かがWebサービスの読み取りからInputStreamを作成した場合、または単にStringをInputStreamに変換した場合、これをファイルにリンクする方法はありません。したがって、できることは、実際にストリームから一時ファイルにデータを書き込み(たとえば、File.createTempFileメソッドを使用)、このファイルをメソッドにフィードすることだけです。

30
Jan Thomä