1. ホーム
  2. java

[解決済み] InputStreamを仮想ファイルに変換する方法

2023-06-18 01:29:16

質問

入力変数がjava.io.File型であることを期待するメソッドがありますが、得られるのはInputStreamだけです。また、私はメソッドの署名を変更することはできません。

実際にファイルをファイルシステムに書き込むことなく、InputStreamをFileタイプに変換するにはどうしたらよいでしょうか。

どのように解決するのですか?

このようなものが動作するはずです。なお、簡単のために、Java 7の機能(closeable resourceでtry block)と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;
    }

}