Java java.nio.file.Files copy()-Methode

Java File Java java.nio.file.Files


java.nio.file.Files.copy()ist eine Hilfsmethode, die im Java-NIO-(New Input/Output-)Paket bereitgestellt wird und zum Kopieren von Dateien oder Verzeichnissen zwischen Dateisystemen verwendet wird. Diese Methode bietet im Vergleich zum traditionellenjava.ioPaket effizientere und flexiblere Möglichkeiten für Dateioperationen.

Methodenüberladung

Files.copy()Die Methode hat drei hauptsächliche überladene Formen:

Kopieren vom Eingabestream in eine Datei

public static long copy(InputStream in, Path target, CopyOption... options) throws IOException

Kopieren von einer Datei in einen Ausgabestream

public static long copy(Path source, OutputStream out) throws IOException

Datei-zu-Datei-Kopie

public static Path copy(Path source, Path target, CopyOption... options) throws IOException

Parameterdetails

Eingabeparameter

  • InputStream in: Der zu kopierende Eingabestream
  • Path source: Der Pfad der Quelldatei
  • Path target: Der Pfad der Zieldatei
  • OutputStream out: Der Ausgabestream, in den geschrieben wird
  • CopyOption... options: Optionale Kopieroptionen

CopyOption-Optionen

Häufig verwendetCopyOptionDazu gehören:

  • StandardCopyOption.REPLACE_EXISTING: Wenn die Zieldatei bereits existiert, wird sie ersetzt
  • StandardCopyOption.COPY_ATTRIBUTES: Dateiattribute in die neue Datei kopieren
  • LinkOption.NOFOLLOW_LINKS: Symbolischen Links nicht folgen

Rückgabewert

  • Für Stream-zu-Datei-Kopie: gibt die Anzahl der kopierten Bytes zurück
  • Für Datei-zu-Datei-Kopie: gibt den Pfad der Zieldatei zurück
  • Für Datei-zu-Stream-Kopie: gibt die Anzahl der kopierten Bytes zurück

Anwendungsbeispiele

Einfache Dateikopie

Beispiel

Path source = Paths.get("source.txt");
Path target = Paths.get("target.txt");

try {
    Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);
    System.out.println("Datei erfolgreich kopiert");
} catch (IOException e) {
    System.err.println("Kopieren fehlgeschlagen: " + e.getMessage());
}

Dateikopie mit Attributen

Beispiel

Path source = Paths.get("source.txt");
Path target = Paths.get("target.txt");

try {
    Files.copy(source, target,
               StandardCopyOption.REPLACE_EXISTING,
               StandardCopyOption.COPY_ATTRIBUTES);
    System.out.println("Datei und Attribute erfolgreich kopiert");
} catch (IOException e) {
    System.err.println("Kopieren fehlgeschlagen: " + e.getMessage());
}

Kopieren von Eingabestream in Datei

Beispiel

try (InputStream in = new URL("http://example.com/file.txt").openStream()) {
    Path target = Paths.get("downloaded.txt");
    long bytesCopied = Files.copy(in, target);
    System.out.println("Download abgeschlossen, kopiert " + bytesCopied + " bytes");
} catch (IOException e) {
    System.err.println("Download fehlgeschlagen: " + e.getMessage());
}

Hinweise

  1. Verzeichnis kopieren: Files.copy()Die Methode kopiert Verzeichnisinhalte standardmäßig nicht rekursiv; sie kopiert nur leere Verzeichnisse.
  2. Symbolische Links: Standardmäßig symbolischen Links folgen, sofern nicht anders angegebenLinkOption.NOFOLLOW_LINKS
  3. Atomarität: Dateikopiervorgänge sind nicht atomar und können während des Vorgangs fehlschlagen
  4. Leistung: Bei großen Dateien ist die NIO-Kopie im Allgemeinen effizienter als traditionelles IO
  5. Ausnahmebehandlung: Möglicherweise ausgelöste Ausnahmen müssen behandelt werdenIOException

Vergleich mit traditionellem IO

Merkmal NIO Files.copy() Traditionelles IO (FileInputStream/FileOutputStream)
Leistung Höher Niedriger
Funktionsumfang Umfangreicher Einfach
Ausnahmebehandlung Prägnanter Umständlicher
Umgang mit symbolischen Links Unterstützt Nicht unterstützt
Kopieren von Dateiattributen Unterstützt Nicht unterstützt

Best Practices

  1. Für einfaches Dateikopieren verwenden Sie die grundlegendsteFiles.copy()Form
  2. Wenn Dateiattribute beibehalten werden müssen, fügen Sie dieCOPY_ATTRIBUTESoption
  3. Wenn Sie eine Zieldatei behandeln, die möglicherweise bereits existiert, verwenden SieREPLACE_EXISTING
  4. Erwägen Sie bei großen Dateien die Verwendung vonFiles.copy()anstelle traditioneller IO-Methoden
  5. Verwenden Sie immer try-with-resources, um Stream-Ressourcen zu behandeln

Java File Java java.nio.file.Files

Andere Erweiterungen