Is it possible to create a File object from InputStream

前端 未结 7 750
滥情空心
滥情空心 2020-12-07 14:08

Is there any way to create a java.io.File object from an java.io.InputStream ?

My requirement is reading the File from a RAR . I am not try

相关标签:
7条回答
  • 2020-12-07 14:47

    If you are using Java version 7 or higher, you can use try-with-resources to properly close the FileOutputStream. The following code use IOUtils.copy() from commons-io.

    public void copyToFile(InputStream inputStream, File file) throws IOException {
        try(OutputStream outputStream = new FileOutputStream(file)) {
            IOUtils.copy(inputStream, outputStream);
        }
    }  
    
    0 讨论(0)
  • 2020-12-07 14:48

    If you do not want to use other library, here is a simple function to convert InputStream to 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);
        }
    }
    

    Now you can easily write an Inputstream into file by using FileOutputStream-

    FileOutputStream out = new FileOutputStream(outFile);
    copyStream (inputStream, out);
    out.close();
    
    0 讨论(0)
  • 2020-12-07 15:00

    Since Java 7, you can do it in one line even without using any external libraries:

    Files.copy(inputStream, outputPath, StandardCopyOption.REPLACE_EXISTING);
    

    See the API docs.

    0 讨论(0)
  • 2020-12-07 15:01

    You need to create new file and copy contents from InputStream to that file:

    File file = //...
    try(OutputStream outputStream = new FileOutputStream(file)){
        IOUtils.copy(inputStream, outputStream);
    } catch (FileNotFoundException e) {
        // handle exception here
    } catch (IOException e) {
        // handle exception here
    }
    

    I am using convenient IOUtils.copy() to avoid manual copying of streams. Also it has built-in buffering.

    0 讨论(0)
  • 2020-12-07 15:01

    In one line :

    FileUtils.copyInputStreamToFile(inputStream, file);
    

    (org.apache.commons.io)

    0 讨论(0)
  • 2020-12-07 15:03

    Easy Java 9 solution with try with resources block

    public static void copyInputStreamToFile(InputStream input, File file) {  
    
        try (OutputStream output = new FileOutputStream(file)) {
            input.transferTo(output);
        } catch (IOException ioException) {
            ioException.printStackTrace();
        }
    
    }
    

    java.io.InputStream#transferTo is available since Java 9.

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