Konvertieren Sie InputStream in das File-Objekt in Java

Mehvish Ashiq 12 Oktober 2023
  1. Verwenden Sie Plain Java, um InputStream in das File-Objekt zu konvertieren
  2. Verwenden Sie die Files.copy()-Methode, um InputStream in das File-Objekt in Java zu konvertieren
  3. Verwenden Sie die Methode InputStream.transferTo(), um InputStream in das File-Objekt in Java zu konvertieren
  4. Verwenden Sie die Apache Commons IO API, um InputStream in das File-Objekt in Java zu konvertieren
Konvertieren Sie InputStream in das File-Objekt in Java

Wir müssen häufig Dateien erstellen und ihnen Inhalte hinzufügen. Beispielsweise müssen wir die über das Netzwerk empfangenen Bytes oder String-Elemente in einer Datei speichern.

Die Daten liegen jeweils als InputStream vor und müssen in eine Datei geschrieben werden. Das heutige Tutorial beschreibt, wie man InputStream in das File-Objekt in Java konvertiert.

Dazu schreiben wir je nach Java-Version verschiedene Beispielcodes mit unterschiedlichen Methoden, um InputStream in das File-Objekt umzuwandeln. Einige der Ansätze sind im Folgenden aufgeführt:

Verwenden Sie Plain Java, um InputStream in das File-Objekt zu konvertieren

Beispielcode:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class plainJava {
  public static void main(String[] args) {
    try {
      InputStream inputStream = new FileInputStream(new File("./files/test.txt"));

      byte[] buffer = new byte[inputStream.available()];
      inputStream.read(buffer);

      File destinationFile = new File("./files/test-plainJava-output.txt");

      OutputStream outputStream = new FileOutputStream(destinationFile);
      outputStream.write(buffer);

    } catch (FileNotFoundException exception) {
      exception.printStackTrace();
    } catch (IOException exception) {
      exception.printStackTrace();
    }
  }
}

Wir instanziieren den FileInputStream im obigen Java-Programm, indem wir den Dateipfad angeben. Es wird eine FileNotFoundException-Ausnahme generiert, wenn die Datei nicht existiert oder wir sie falsch geschrieben haben.

Wir verwenden FileInputStream, um die Eingabebytes aus der angegebenen Datei abzurufen. Dann erstellen wir ein Array namens buffer vom Typ byte, wobei die Methode inputStream.available() die Anzahl der Bytes angibt, die wir lesen können, bis der Aufruf read() den Ausführungsfluss des Programms blockiert.

Danach instanziieren wir die Klasse File, um die Datei test-plainJava-output.txt zu erstellen, und speichern ihre Referenz in der Variablen destinationFile. Als nächstes erstellen wir ein Objekt von FileOutputStream, übergeben die Referenz der Zieldatei, die wir im vorherigen Schritt erstellt haben, und schreiben den byte-Code.

Öffnen Sie nun die Dateien test.txt und test-plainJava-output.txt und sehen Sie, dass beide den gleichen Inhalt haben. Denken Sie daran, dass wir möglicherweise die IOException erhalten, wenn wir beim Lesen oder Schreiben von Informationen Probleme haben.

Verwenden Sie die Files.copy()-Methode, um InputStream in das File-Objekt in Java zu konvertieren

Beispielcode:

import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.nio.file.Files;
import java.nio.file.Paths;

public class filesCopy {
  private static final String OUTPUT_FILE = "./files/test_filesCopy-output.txt";

  public static void main(String[] args) {
    URI u = URI.create("https://www.google.com/");

    try (InputStream inputStream = u.toURL().openStream()) {
      // Java 1.7 onwards
      Files.copy(inputStream, Paths.get(OUTPUT_FILE));
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

Wir können diesen Ansatz in Java 7 oder höher verwenden. Im obigen Code Fence verwenden wir Files.copy() von Java NIO API, das verwendet wird, um das InputStream-Objekt in das File-Objekt zu kopieren, wie oben gezeigt.

Im Programm filesCopy erstellen wir zuerst ein Objekt vom Typ String, das den Pfad für die Ausgabedatei enthält.

In der main()-Methode erstellen wir mit der create()-Methode ein URI-Objekt und speichern dessen Referenz in der u-Variablen, die im nächsten Schritt verwendet wird. Denken Sie daran, dass wir create() verwenden, wenn wir sicher sind, dass der angegebene String-Wert als URI-Objekt geparst wird; andernfalls würde es als Fehler des Programmierers betrachtet werden.

Als nächstes verwenden wir das URI-Objekt u, um die toURL()-Methode aufzurufen, um eine URL aus diesem URI zu erstellen, und verwenden die openStream()-Methode, um das java.io.InputSteam-Objekt zu erhalten. Danach verwenden wir die Methode Files.copy(), die zwei Parameter übernimmt, das inputStream-Objekt und einen Pfad der Datei, in die wir die Daten kopieren wollen.

Nun sehen wir die geparsten Daten in unserer Ausgabedatei, in unserem Fall test_filesCopy-output.txt. Wir verwenden den try-catch-Block, um die Ausnahme zu behandeln, falls eine auftritt; andernfalls beendet das Programm die Ausführung.

Verwenden Sie die Methode InputStream.transferTo(), um InputStream in das File-Objekt in Java zu konvertieren

Beispielcode:

import java.io.*;
import java.net.URI;

public class inputStreamTransferTo {
  public static void main(String[] args) {
    URI u = URI.create("https://www.google.com/");

    try (InputStream inputStream = u.toURL().openStream()) {
      File outputFile = new File("./files/test_transferTo-output.txt");
      OutputStream outputStream = new FileOutputStream(outputFile, false);
      inputStream.transferTo(outputStream); // Java 9

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

Wir können diesen Ansatz verwenden, wenn wir Java 9 oder höher haben. Dieses Codebeispiel ähnelt dem vorherigen, bei dem wir die Methode Files.copy() verwendet haben, mit Ausnahme einiger Unterschiede im Block try.

Hier erstellen wir ein Objekt der Klasse File, indem wir die Ausgabedatei angeben, in unserem Fall test_transferTo-output.txt. Dann verwenden wir dieses File-Objekt, um die FileOutputStream-Klasse zu instanziieren, die wir verwenden werden, um Daten in unsere Ausgabedatei (test_transferTo_output.txt) zu schreiben.

Schließlich verwenden wir die Methode inputStream.transferTo(), die einen Ausgabestream als Parameter nimmt und inputStream direkt in den angegebenen outputSteam kopiert. Jetzt haben Sie die geparsten Daten in der Ausgabedatei test_transferTo_output.txt.

Wir haben diesen Code auch in den try-catch-Block eingeschlossen, um die Beendigung des Programms zu vermeiden.

Verwenden Sie die Apache Commons IO API, um InputStream in das File-Objekt in Java zu konvertieren

Beispielcode:

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import org.apache.commons.io.FileUtils;

public class apacheCommons {
  public static void main(String[] args) throws IOException {
    URI u = URI.create("https://www.google.com/");
    try (InputStream inputStream = u.toURL().openStream()) {
      File outputFile = new File("./files/test_apache_output.txt");
      // commons-io
      FileUtils.copyInputStreamToFile(inputStream, outputFile);
    }
  }
}

Dieser Beispielcode ähnelt den vorherigen. Wir erstellen ein URI-Objekt, um toURL aufzurufen, das über dieses URI-Objekt eine URL erstellt, das java.io.InputStream-Objekt mit der openStream()-Methode abruft und die File instanziiert. Klasse, die auf einen Pfad für unsere Ausgabedatei zeigt, die hier test_apache_output.txt ist.

Wir verwenden jedoch die API Apache Commons IO, um den Eingabestrom in das Dateiobjekt in Java zu konvertieren. Diese API ist sehr praktisch und bietet verschiedene Funktionalitäten, um verschiedene Eingabe-/Ausgabevorgänge für Dateien durchzuführen.

Um diese Bibliothek zu verwenden, müssen wir zuerst die Abhängigkeit commons-io in der Datei pom.xml wie folgt hinzufügen:

<dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.7</version>
</dependency>

Dann können wir die Methode copyInputStreamToFile() verwenden, um Bytes aus einem Eingabestrom zu lesen und sie in die angegebene Datei zu kopieren. Jetzt können Sie die geparsten Daten in der Datei test_apache_output.txt sehen, die eine Ausgabedatei ist.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Verwandter Artikel - Java InputStream