Il s'agit d'un examen de la copie de fichiers qui ne peut être effectué qu'avec l'API standard de Java 1.7 ou version ultérieure.
environnement
référence
Files#copy() (Java 1.7+)
Il s'agit d'une méthode utilisant la méthode de copie de la classe Files ajoutée dans Java 1.7.
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
** Exemple de code 1 **
example
Path source = Paths.get("path/to/in.txt");
Path target = Paths.get("path/to/out.txt");
Files.copy(source, target);
Si vous souhaitez écraser le fichier de destination de la copie, spécifiez REPLACE_EXISTING dans l'option de copie.
example
Path source = Paths.get("path/to/in.txt");
Path target = Paths.get("path/to/out.txt");
Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);
Si vous souhaitez copier dans n'importe quel répertoire. Dans cet exemple, «chemin / vers / in.txt» est copié vers «chemin / vers / nouveauRép / in.txt».
example
Path source = Paths.get("path/to/in.txt");
Path targetDir = Paths.get("path/to/newDir");
Files.copy(source, targetDir.resolve(source.getFileName()));
** Exemple de code 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+)
Il s'agit d'une méthode utilisant la méthode transferTo ajoutée dans Java 9 à la classe InputStream.
signature
public long transferTo(OutputStream out) throws IOException
transferTo ne ferme pas le flux de lecture / écriture comme décrit dans JavaDoc (traduction automatique).
Lit tous les octets de ce flux d'entrée et écrit les octets dans le flux de sortie spécifié dans l'ordre où ils ont été lus. Au retour, ce flux d'entrée est à la fin du flux. Cette méthode ne ferme aucun flux.
** Sous-classe connue **
La valeur entre () est la version Java dans laquelle la classe et l'interface sont installées.
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
** Exemple de code 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);
}
** Exemple de code 1 (Java 9+) **
À partir de Java 9, les ressources peuvent être déclarées en dehors de la clause try.
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);
}
** Exemple de code 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);
}
** Exemple de code 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+)
Il s'agit d'une méthode d'utilisation de la méthode transferTo ajoutée dans Java 10 à la classe Reader.
signature
public long transferTo(Writer out) throws IOException
transferTo ne ferme pas le flux de lecture / écriture comme décrit dans JavaDoc (traduction automatique).
Lit tous les caractères de ce lecteur et les écrit dans le rédacteur spécifié dans l'ordre dans lequel ils ont été lus. Quand vous revenez, ce leader est à la fin du flux. Cette méthode ne ferme ni le lecteur ni l'écrivain.
** Sous-classe connue **
La valeur entre () est la version Java dans laquelle la classe et l'interface sont installées.
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
** Exemple de code **
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
Il est recommandé d'encapsuler InputStreamReader et FileReader avec BufferedReader.
Généralement, lorsqu'une demande de lecture est faite au lecteur, une demande de lecture au flux de caractères sous-jacent correspondant ou au flux d'octets est émise. Pour cette raison, il est recommandé d'envelopper la zone autour du Reader avec une opération read () inefficace, telle que FileReader et InputStreamReader.
De même, il est recommandé d'encapsuler OutputStreamWriter et FileWriter avec BufferedWriter.
En général, l'enregistreur envoie immédiatement sa sortie au caractère ou au flux d'octets sous-jacent. Il est inefficace d'appeler l'opération write () directement à partir d'un Writer tel que FileWriter ou OutputStreamWriter, sauf si vous avez besoin d'une sortie rapide, il est donc recommandé de l'envelopper dans un BufferedWriter.
** Exemple de code **
Vous pouvez réécrire l'exemple de code FileReader comme suit.
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
** Exemple de code **
example
String source = "Amenbo\n rouge\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
La classe URLReader a été ajoutée dans Java 1.8u40.
** Obsolète dans Java 11 ** (JEP 335: obsolète le moteur JavaScript Nashorn).
** Exemple de code **
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+)
Il s'agit d'une méthode utilisant la méthode writeString ajoutée dans Java 11 à la classe Files.
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