[Java] Que dois-je utiliser pour écrire des fichiers?

Contexte

Il existe de nombreuses classes pour lire et écrire des fichiers, mais je ne savais pas quelle classe était la meilleure à utiliser. Autrefois, je faisais référence au code d'un autre projet ~~ copy ~~. Alors j'ai cherché. En conclusion, plus je levais les yeux, plus j'étais confus. Et utilisez ceci! !! Je n'ai rien trouvé de tel.

Qu'est-ce que Stream?

Traitez les données en octets. ~~ Au fait, il n'y a pas de classe appelée Stream. ~~ interface https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Stream.html

InputStream Une classe qui fait ** "lire" ** avec des octets.

OutputStream Une classe qui ** "écrit" ** avec des octets.

FileInputStream Une classe pour lire des octets. Une classe enfant de InputStream. C'est assez vieux.

FileOutputStream Une classe pour écrire des octets. Une classe enfant de OutputStream. C'est assez vieux.

InputStreamReader Le rôle de transmettre le InputStream au lecteur. Spécifiez le code de caractère ici.

OutputStreamWriter Le rôle de transmettre le flux de sortie à l'enregistreur. Spécifiez le code de caractère ici.

Reader Faites ** "lire" ** à partir du flux en unités de caractères (char [] dans le code) au lieu d'octets.

Writer Faites ** "écrire" ** à partir du flux en unités de caractères (char [] dans le code) au lieu d'octets.

Qu'est-ce que la mise en mémoire tampon?

Une fonction qui stocke en mémoire et lit et écrit à la fois lorsqu'un certain montant est accumulé. En conséquence, les performances de lecture et d'écriture octet par octet sont bonnes.

BufferedReader Avec la fonction de mise en mémoire tampon du lecteur

BufferedWriter Avec la fonction de mise en mémoire tampon Writer

J'ai essayé d'implémenter la fonction d'écriture de fichier

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class FileCreate {
    public static void main(String[] args) {

        //Chemin du fichier à lire et à écrire
        Path path = Paths.get("C:\\demo.txt");
        //Chaîne de caractères à écrire
        List<String> lines = Stream.of("AIUEO", "Kakikukeko", "SA Shi Su Se So").collect(Collectors.toList());

        //Écriture de fichier 1
        //Le code de caractère est UTF par défaut-8
        //J'utilise OutputStreamWriter
        try (BufferedWriter writer = Files.newBufferedWriter(path)) {
            for (String str : lines) {
                //Notez que si vous passez null, il sera écrit sous la forme d'une chaîne de caractères appelée null.
                writer.append(str);
                writer.newLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        //Écriture de fichier 2
        //Utilise en interne BufferedWriter, OutputWriter et FileOutputStream
        try {
            //Lorsque vous voulez en écrire un nouveau
            Files.write(path, lines, Charset.forName("Shift_JIS"), StandardOpenOption.WRITE);
            //Lorsque vous souhaitez ajouter
            Files.write(path, lines, Charset.forName("Shift_JIS"), StandardOpenOption.APPEND);
        } catch (IOException e) {
            e.printStackTrace();
        }

        //Écriture de fichier 3
        // printWriter
        try (
            //Vrai si vous voulez ajouter, faux si nouveau
            FileOutputStream fileOutputStream = new FileOutputStream(path.toFile(), true);
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, Charset.forName("Shift_JIS"));
            PrintWriter printWriter = new PrintWriter(outputStreamWriter)) {

            for (String s : lines) {
                printWriter.println(s);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        //Écriture de fichier 4
        // BufferedWriter
        try (
            //Vrai si vous voulez ajouter, faux si nouveau
            FileOutputStream fileOutputStream = new FileOutputStream(path.toFile(), true);
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, Charset.forName("Shift_JIS"));
            BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter)) {

            for (String s : lines) {
                bufferedWriter.append(s);
                bufferedWriter.newLine();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Si vous voulez garder les choses simples, je pense que vous pouvez écrire le fichier 1 ou 2. Cependant, si vous souhaitez personnaliser le contenu d'écriture à votre guise, j'utiliserai l'écriture de fichier 3 ou 4.

L'écriture de fichier 3 et 4 est facile à comprendre et à déclarer les variables une par une. Bien sûr, il est normal de les rassembler en une seule ligne.

new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path.toFile(), true), Charset.forName("Shift_JIS")));

Une chose à garder à l'esprit est de ne pas oublier close ().

À la fin

J'ai passé environ deux jours à faire des recherches, mais je pouvais à peu près le comprendre. Cependant, je sens que je ne comprends pas les détails. Si c'est faux, ou ce code est-il inutile? Je vous serais reconnaissant si vous pouviez souligner certains points.

Recommended Posts

[Java] Que dois-je utiliser pour écrire des fichiers?
Que dois-je utiliser pour le framework de test [Rails]
Utiliser uniquement pour écrire des fichiers - Apache Camel
J'ai créé un outil Diff pour les fichiers Java
Ce que j'ai recherché sur Java 8
Ce que j'ai recherché sur Java 9
Ce que j'ai recherché sur Java 7
[Java] Conseils pour l'écriture de la source
Ce que j'ai recherché sur Java 5
java (utilisez le type de classe pour le champ)
Ce que j'ai appris avec Java Gold
Ce que j'ai appris avec Java Silver
Ce que j'ai recherché sur l'apprentissage Java
Comment utiliser binding.pry pour afficher le fichier
Java pour tous! J'ai lu tout le monde en Java #minjava
J'ai essayé le mappeur d'objets de Cassandra pour Java
Apprenez de «Et alors», les bases de Java [pour les débutants]
[Java] Lecture et écriture de fichiers avec OpenCSV
Ce que j'ai appris du calcul monétaire Java
Lire et écrire des fichiers gzip en Java
Je veux que vous utilisiez Scala comme meilleur Java pour le moment
Étudiez pendant 3 semaines et réussissez Java Bronze
Utiliser l'instruction try-with-resources Java7 pour le traitement de fermeture du curseur
Je veux utiliser java8 forEach avec index
Quel est le modificateur volatile pour les variables Java?
Ce que j'ai appris en Java (partie 2) Que sont les variables?
Ce que j'ai fait lorsque j'ai converti Java en Kotlin
Utilisez une bibliothèque Java externe pour le moment
Utilisons Java New FileIO! (Introduction, pour les débutants)
[Review] Lecture et écriture de fichiers avec java (JDK6)
Qu'est-ce que 'java
Pour l'apprentissage JAVA (2018-03-16-01)
Qu'est-ce que Java <>?
IDE 2017 pour Java
Qu'est-ce que 'java
Ce que j'ai appris
[Java] Utilisez Collectors.collectingAndThen
Java pour instruction
Je veux aussi utiliser ES2015 avec Java! → (´ ・ ω ・ `)
Que dois-je faire pour recharger le Dockerfile mis à jour?
Comment utiliser Truth (bibliothèque d'assertions pour Java / Android)
Ce que j'ai appris en Java (partie 3) Déclaration d'exécution des instructions
Ce que j'ai appris lors de la création d'un serveur en Java
J'ai essayé d'utiliser l'instruction Extended for en Java
Ce dont les ingénieurs Java ont besoin pour se préparer à la version Java 11
J'ai essayé de mâcher C # (lire et écrire des fichiers)
J'ai essayé de découvrir ce qui avait changé dans Java 9
Que dois-je faire après janvier 2019 concernant le problème du paiement Java et le problème de la fin du support Java 8?