Dies ist eine Überprüfung des Kopierens von Dateien, die nur mit der Standard-API von Java 1.7 oder höher durchgeführt werden kann.
Umgebung
Referenz
Files#copy() (Java 1.7+)
Dies ist eine Methode, die die Kopiermethode der in Java 1.7 hinzugefügten Files-Klasse verwendet.
signature
public static long copy(InputStream in, Path target, CopyOption... options) throws IOException
public static long copy(Path source, OutputStream out) throws IOException
public static Path copy(Path source, Path target, CopyOption... options) throws IOException
** Codebeispiel 1 **
example
Path source = Paths.get("path/to/in.txt");
Path target = Paths.get("path/to/out.txt");
Files.copy(source, target);
Wenn Sie die Kopierzieldatei überschreiben möchten, geben Sie in der Kopieroption REPLACE_EXISTING an.
example
Path source = Paths.get("path/to/in.txt");
Path target = Paths.get("path/to/out.txt");
Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);
Wenn Sie in ein beliebiges Verzeichnis kopieren möchten. In diesem Beispiel wird "path / to / in.txt" nach "path / to / newDir / in.txt" kopiert.
example
Path source = Paths.get("path/to/in.txt");
Path targetDir = Paths.get("path/to/newDir");
Files.copy(source, targetDir.resolve(source.getFileName()));
** Codebeispiel 2 **
example
InputStream source = Files.newInputStream(Paths.get("path/to/in.txt"));
Path target = Paths.get("path/to/out.txt");
try (source) {
Files.copy(source, target);
}
InputStream.transferTo (Java 9+)
Dies ist eine Methode, die die in Java 9 zur InputStream-Klasse hinzugefügte transferTo-Methode verwendet.
signature
public long transferTo(OutputStream out) throws IOException
transferTo schließt den Reader / Writer-Stream nicht wie in JavaDoc (maschinelle Übersetzung) beschrieben.
Liest alle Bytes aus diesem Eingabestream und schreibt die Bytes in der angegebenen Reihenfolge in den angegebenen Ausgabestream. Bei der Rückkehr befindet sich dieser Eingabestream am Ende des Streams. Diese Methode schließt keinen Stream.
** Bekannte Unterklasse **
Der Wert in () ist die Java-Version, in der die Klasse und die Schnittstelle installiert sind.
InputStream (1.0)
|
+--- javax.sound.sampled.AudioInputStream (1.3)
|
+--- ByteArrayInputStream (1.0)
|
+--- FileInputStream (1.0)
|
+--- FilterInputStream (1.0)
| |
| +--- BufferedInputStream (1.0)
| +--- java.util.zip.CheckedInputStream (1.1)
| +--- javax.crypto.CipherInputStream (1.4)
| +--- DataInputStream (1.0)
| +--- java.util.zip.DeflaterInputStream (1.6)
| +--- java.security.DigestInputStream (1.2)
| +--- java.util.zip.InflaterInputStream (1.1)
| | @Deprecated
| +--- LineNumberInputStream (1.0)
| +--- javax.swing.ProgressMonitorInputStream (1.2)
| +--- PushbackInputStream (1.0)
|
+--- org.omg.CORBA.portable.InputStream
|
+--- ObjectInputStream (1.1)
|
+--- PipedInputStream (1.0)
|
+--- SequenceInputStream (1.0)
|
| @Deprecated
+--- StringBufferInputStream (1.0)
FileInputStream.transferTo
** Codebeispiel 1 **
example
Path source = Paths.get("path/to/in.txt");
Path target = Paths.get("path/to/out.txt");
try (InputStream in = new FileInputStream(source.toFile());
OutputStream out = new FileOutputStream(target.toFile())) {
in.transferTo(out);
}
** Codebeispiel 1 (Java 9+) **
Ab Java 9 können Ressourcen außerhalb der try-Klausel deklariert werden.
example
Path source = Paths.get("path/to/in.txt");
Path target = Paths.get("path/to/out.txt");
InputStream in = new FileInputStream(source.toFile());
OutputStream out = new FileOutputStream(target.toFile());
try (in; out) {
in.transferTo(out);
}
** Codebeispiel 2 **
example
Path source = Paths.get("path/to/in.txt");
Path target = Paths.get("path/to/out.txt");
try (InputStream in = Files.newInputStream(source);
OutputStream out = Files.newOutputStream(target)) {
in.transferTo(out);
}
** Codebeispiel 2 (Java 9+) **
example
Path source = Paths.get("path/to/in.txt");
Path target = Paths.get("path/to/out.txt");
InputStream in = Files.newInputStream(source);
OutputStream out = Files.newOutputStream(target);
try (in; out) {
in.transferTo(out);
}
Reader.transferTo (Java 10+)
Dies ist eine Methode zur Verwendung der transferTo-Methode, die in Java 10 zur Reader-Klasse hinzugefügt wurde.
signature
public long transferTo(Writer out) throws IOException
transferTo schließt den Reader / Writer-Stream nicht wie in JavaDoc (maschinelle Übersetzung) beschrieben.
Liest alle Zeichen dieses Lesegeräts und schreibt sie in der Reihenfolge, in der sie gelesen wurden, an den angegebenen Schreiber. Wenn Sie zurückkommen, befindet sich dieser Anführer am Ende des Streams. Diese Methode schließt weder den Leser noch den Schreiber.
** Bekannte Unterklasse **
Der Wert in () ist die Java-Version, in der die Klasse und die Schnittstelle installiert sind.
Reader
|
+--- BufferedReader (1.1)
| |
| +--- LineNumberReader (1.1)
|
+--- CharArrayReader (1.1)
|
+--- FilterReader (1.1)
| |
| +--- PushbackReader (1.1)
|
+--- InputStreamReader (1.1)
| |
| +--- FileReader (1.1)
|
+--- PipedReader (1.1)
|
+--- StringReader (1.1)
|
+--- jdk.nashorn.api.scripting.URLReader (1.8u40)
FileReader.transferTo
** Codebeispiel **
example
Path source = Paths.get("path/to/in.txt");
Path target = Paths.get("path/to/out.txt");
Reader in = new FileReader(source.toFile());
Writer out = new FileWriter(target.toFile());
try (in; out) {
in.transferTo(out);
}
BufferedReader.transferTo
Es wird empfohlen, InputStreamReader und FileReader mit BufferedReader zu verpacken.
Wenn eine Leseanforderung an den Reader gesendet wird, wird im Allgemeinen eine Leseanforderung an den entsprechenden zugrunde liegenden Zeichenstrom oder Bytestrom ausgegeben. Aus diesem Grund wird empfohlen, einen BufferedReader um den Reader zu wickeln, was für read () -Operationen wie FileReader und InputStreamReader nicht effizient ist.
Ebenso wird empfohlen, OutputStreamWriter und FileWriter mit BufferedWriter zu verpacken.
Im Allgemeinen sendet der Writer seine Ausgabe sofort an das zugrunde liegende Zeichen oder den Bytestream. Es ist ineffizient, die write () -Operation direkt von einem Writer wie FileWriter oder OutputStreamWriter aus aufzurufen, es sei denn, Sie benötigen eine sofortige Ausgabe. Es wird daher empfohlen, sie in einen BufferedWriter zu packen.
** Codebeispiel **
Sie können das FileReader-Codebeispiel wie folgt umschreiben.
example
BufferedReader in = new BufferedReader(new FileReader(source.toFile()));
BufferedWriter out = new BufferedWriter(new FileWriter(target.toFile()));
try (in; out) {
in.transferTo(out);
}
StringReader.transferTo
** Codebeispiel **
example
String source = "Amenbo\n rot\n Aiueo";
Path target = Paths.get("path/to/out.txt");
Reader in = new StringReader(source);
Writer out = new FileWriter(target.toFile());
try (in; out) {
in.transferTo(out);
}
URLReader.transferTo
Die URLReader-Klasse wurde in Java 1.8u40 hinzugefügt.
** In Java 11 veraltet ** (JEP 335: Veraltet die Nashorn JavaScript Engine).
** Codebeispiel **
example
URI source = URI.create("http://www.oracle.com/technetwork/java/index.html");
Path target = Paths.get("path/to/out.txt");
Reader in = new URLReader(source.toURL(), StandardCharsets.UTF_8);
Writer out = new FileWriter(target.toFile());
try (in; out) {
in.transferTo(out);
}
(WIP) Files#writeString (Java 11+)
Dies ist eine Methode, die die writeString-Methode verwendet, die in Java 11 zur Files-Klasse hinzugefügt wurde.
public static Path writeString(Path path, CharSequence csq, OpenOption... options) throws IOException
public static Path writeString(Path path, CharSequence csq, Charset cs, OpenOption... options) throws IOException
Recommended Posts