How to convert InputStream to virtual File

前端 未结 2 1087
时光说笑
时光说笑 2020-11-29 02:27

I have a method which expects the one of the input variable to be of java.io.File type but what I get is only InputStream. Also, I cannot change the signature of the method.

相关标签:
2条回答
  • 2020-11-29 02:47

    Something like this should work. Note that for simplicity, I've used a Java 7 feature (try block with closeable resource), and IOUtils from Apache commons-io. If you can't use those it'll be a little longer, but the same idea.

    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;
        }
    
    }
    
    0 讨论(0)
  • 2020-11-29 02:55

    You can't. The input stream is just a generic stream of data and there is no guarantee that it actually originates from a File. If someone created an InputStream from reading a web service or just converted a String into an InputStream, there would be no way to link this to a file. So the only thing you can do is actually write data from the stream to a temporary file (e.g. using the File.createTempFile method) and feed this file into your method.

    0 讨论(0)
提交回复
热议问题