170 Stimmen

Ist es möglich, ein File-Objekt aus InputStream zu erstellen

Gibt es eine Möglichkeit, ein java.io.File-Objekt aus einem java.io.InputStream zu erstellen?

Meine Anforderung besteht darin, die Datei aus einem RAR zu lesen. Ich versuche nicht, eine temporäre Datei zu schreiben, ich habe eine Datei im RAR-Archiv, die ich zu lesen versuche.

123voto

Tomasz Nurkiewicz Punkte 322861

Sie müssen eine neue Datei erstellen und den Inhalt von InputStream in diese Datei kopieren:

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

Ich verwende das praktische IOUtils.copy() um manuelles Kopieren von Streams zu vermeiden. Außerdem verfügt es über integriertes Puffern.

87voto

Victor Petit Punkte 2356

In einer Zeile:

FileUtils.copyInputStreamToFile(inputStream, file);

(org.apache.commons.io)

52voto

kidney Punkte 2488

Seit Java 7 kannst du es sogar in einer Zeile machen, ohne externe Bibliotheken zu verwenden:

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

Siehe die API-Dokumentation.

38voto

Shehan Simen Punkte 717

Erstellen Sie zuerst eine temporäre Datei mit org.apache.commons.io.

File tempFile = File.createTempFile(prefix, suffix);
tempFile.deleteOnExit();
FileOutputStream out = new FileOutputStream(tempFile);
IOUtils.copy(in, out);
return tempFile;

12voto

MariuszS Punkte 29175

Einfache Java 9-Lösung mit 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 ist seit Java 9 verfügbar.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X