Maison > Java > javaDidacticiel > Explication détaillée des bases des IO dans le didacticiel avancé Java

Explication détaillée des bases des IO dans le didacticiel avancé Java

怪我咯
Libérer: 2017-07-02 10:30:15
original
1520 Les gens l'ont consulté

Cet article présente principalement les bases IO du didacticiel avancé Java. Il s'agit simplement d'une introduction de base à Java IO, y compris les opérations de lecture et d'écriture.

L'ordinateur est le plus important. la fonction est de traiter les données. Un langage informatique utile doit avoir de bonnes capacités d'E/S afin que les données non traitées entrent dans le programme et que les données traitées en sortent.

Par rapport à d’autres langages, les fonctions IO de Java sont complexes. Dans d'autres langages, de nombreuses fonctions IO (telles que la lecture de fichiers) sont encapsulées et peuvent être implémentées avec une ou deux lignes de programmes. En Java, les programmeurs ont souvent besoin de plusieurs niveaux de décoration pour réaliser la lecture des fichiers.

L'avantage de la complexité relative est la flexibilité des IO. En Java, les programmeurs peuvent contrôler l’ensemble du processus d’E/S pour concevoir la meilleure méthode d’E/S. Nous en verrons plus ci-dessous.

Exemple IO

Voici le fichier file.txt que j'ai utilisé pour la démonstration

Hello World!
Hello Nerd!
Copier après la connexion

Etudions d'abord un exemple de lecture de fichier :

import java.io.*;

public class Test
{
  public static void main(String[] args)
  {
    try {
      BufferedReader br =
       new BufferedReader(new FileReader("file.txt")); 

      String line = br.readLine();

      while (line != null) {
        System.out.println(line);
        line = br.readLine();
      }
      br.close();
    }
    catch(IOException e) {
      System.out.println("IO Problem");
    }
  }
}
Copier après la connexion

Ce programme contient un try...catch...finally gestionnaire d'exceptions. Veuillez vous référer au didacticiel Java avancé sur la gestion des exceptions

Combinaison de décorateurs et de fonctions

La clé pour programmer IO est de créer un objet BufferedReader br:

  BufferedReader br = new BufferedReader(new FileReader("file.txt"));
Copier après la connexion

Lors du processus de création, nous avons d'abord créé un objet FileReader La fonction de cet objet est de lire le flux d'octets du fichier "file.txt" et de le convertir en flux de texte. En Java, le codage de texte standard est Unicode. BufferedReader() reçoit l'objet FileReader, étend les fonctions de FileReader et crée un nouvel objet BufferedReader. En plus des fonctions de lecture et de conversion de fichiers mentionnées ci-dessus, cet objet fournit également des fonctions de lecture en cache (mise en mémoire tampon). Enfin, on peut lire le fichier ligne par ligne en appelant la méthode readLine() sur l'objet br.

(La lecture du cache consiste à ouvrir une zone de la mémoire en tant que cache, qui stocke le flux de texte lu par FileReader. Lorsque le contenu du cache est lu (comme la commande readLine()), le cache sera chargé Flux de texte suivant. )

BufferedReader() est un décorateur qui reçoit un objet primitif et renvoie un objet décoré avec des fonctions plus complexes. L’avantage des décorateurs est qu’ils peuvent être utilisés pour décorer différents objets. Ce que nous modifions ici, c'est le flux de texte lu à partir du fichier. D'autres flux de texte, tels que l'entrée standard, les flux de transmission réseau, etc., peuvent être modifiés par BufferedReader() pour réaliser une lecture en cache.

La figure ci-dessous montre comment br fonctionne, avec des données circulant de bas en haut :

Le processus de décoration ci-dessus et le flux de texte sous Linux. les idées sont très similaires. Sous Linux, nous utilisons une approche de type fonction pour traiter et transmettre les flux de texte. En Java, nous utilisons des décorateurs. Mais leurs objectifs sont similaires, à savoir réaliser une modularisation et une libre combinaison de fonctions.

Plus de combinaisons

En fait, Java offre une multitude de décorateurs. FileReader combine les deux étapes de lecture et de conversion et adopte les paramètres par défaut couramment utilisés, tels que l'Unicode pour l'encodage. Nous pouvons utiliser la combinaison FileInputStream + InputStreamReader pour remplacer FileReader, séparant ainsi les deux étapes de lecture des octets et de conversion, et ayant un meilleur contrôle sur les deux processus.

(Bien sûr, FileReader est plus pratique à utiliser. InputStreamReader convertit FileInputStream en Reader pour traiter le texte Unicode)

représentation par flèche Flux de données direction

La lecture et l'écriture de flux proviennent de quatre classes de base : InputStream, OutputStream, Reader et Writer. InputStream et Reader gèrent les opérations de lecture, et OutputStream et Writer gèrent les opérations d'écriture. Ils se trouvent tous deux dans le package java.io. La relation d'héritage est la suivante :

java.io

De plus, IOException possède les classes dérivées suivantes :

IOException

Reader, Writer et leurs classes dérivées gèrent le texte Unicode. Comme on le voit Buffered Reader, InputStreamReader ou FileReader.

InputStream et OutputStream et leurs classes dérivées gèrent les flux d'octets. Les données de l'ordinateur peuvent être considérées sous forme d'octets, de sorte qu'InputStream et OutputStream peuvent être utilisés pour traiter une plus large gamme de données. Par exemple, nous pouvons utiliser la combinaison suivante pour lire les données (telles que des entiers) contenues dans le fichier compressé :

箭头表示数据流动方向

我们从压缩文件中读出字节流,然后解压缩,最终读出数据。

写入

写入(write)操作与读取操作相似。我们可以通过使用装饰,实现复杂的写入功能。这里是一个简单的写入文本的例子:

import java.io.*;

public class Test
{
  public static void main(String[] args)
  {
    try {
      String content = "Thank you for your fish.";

      File file = new File("new.txt");

      // create the file if doesn't exists
      if (!file.exists()) {
        file.createNewFile();
      }

      FileWriter fw = new FileWriter(file.getAbsoluteFile());
      BufferedWriter bw = new BufferedWriter(fw);
      bw.write(content);
      bw.close();

    }
    catch(IOException e) {
      System.out.println("IO Problem");
    }
  }
}
Copier après la connexion

上面创建了file对象,用于处理文件路径。

总结

这里只是对Java IO的基本介绍。Java的IO相对比较复杂。Java程序员需要花一些时间来熟悉java.io中的类及其功能。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal