Consulter le mémo de la copie de fichier de Java 1.7 ou version ultérieure

Aperçu

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

Consulter le mémo de la copie de fichier de Java 1.7 ou version ultérieure
Notes de révision de Java NIO 2
Java version 8 et fonctionnalités ultérieures
Notes de révision de Java Collections Framework
Instructions Java while et for
SDK AWS pour Java 1.11.x et 2.x
[Java] Types de base et notes d'instructions
Java pour les débutants, les expressions et les opérateurs 1
Java pour les débutants, les expressions et les opérateurs 2
Remarques sur le chemin et le package Java
Classes et instances Java pour les débutants
Revue Java
[Pour les débutants] Différence entre Java et Kotlin
note java
Notes pour lire et générer des fichiers xlsx à partir de Java à l'aide d'Apache POI
[Java] Proxy pour la journalisation des résultats SQL et SQL
[Java8] Recherchez le répertoire et récupérez le fichier
[Java 7 ou version ultérieure] Empêcher l'omission de la suppression de fichiers temporaires
Exemple de contre-mesure NullPointerException (facultatif) pour Java8 ou version ultérieure
Demandez n jours ouvrables plus tard avec JAVA
Étudiez pendant 3 semaines et réussissez Java Bronze
Charger et télécharger des notes en Java sur le stockage Azure
Notes de pré-introduction pour les apprenants JavaScript expérimentés de Java
Télécharger et télécharger des notes en java sur S3
[Java] Convertir et importer des valeurs de fichier avec OpenCSV
[Review] Lecture et écriture de fichiers avec java (JDK6)
Pour l'apprentissage JAVA (2018-03-16-01)
Génériques Java (Notes)
Examen et mise en œuvre de la bibliothèque CSV pour le chargement de grandes quantités de données dans MySQL (Java)
[Java] Note sur le tableau
Note de révision Enum
IDE 2017 pour Java
création de fichier java
Java et JavaScript
[Java] Notes d'étude
XXE et Java
Notes de sérialisation Java
java IO examen
Java pour instruction
[Java] Créons un Minecraft Mod 1.14.4 [0. Fichier de base]
<java> Lire le fichier Zip et le convertir directement en chaîne
Exemple de programme d'entrée / sortie de fichier Java (jdk1.8 ou version ultérieure)
Échantillon jusqu'à l'authentification OAuth 2.0 et l'acquisition de jetons d'accès (Java)
Le débogueur Java VSCode pour la construction Java a échoué Causes et contre-mesures
[Java] Créons un Minecraft Mod 1.16.1 [Fichier de base]
Apprentissage pour la première fois des expressions et opérateurs Java # 3
[Java] À propos de Objects.equals () et examen de la comparaison de chaînes (== et égal à)
Ceci et cela pour éditer ini en Java. : inieditor-java
Liste des instructions Java fréquemment utilisées (pour les débutants et les débutants)
Préparer l'environnement pour java11 et javaFx avec Ubuntu 18.4
Résumé des méthodes de lecture de fichiers pour chaque format de fichier Java