Comment lire à partir d'un fichier local en Java

Comment lire à partir d'un fichier local en Java
Un fichier local est dans le disque dur ou un lecteur flash attaché au port USB. Les fichiers peuvent être classés en deux catégories: fichiers texte et fichiers d'octets. Les fichiers texte typiques sont des fichiers créés par un éditeur de texte. Le fichier image est un exemple de fichier d'octet composé principalement d'octets bruts.

Cet article donne une explication de base sur la façon de lire des fichiers de texte et d'octets locaux en Java. Pour lire un fichier texte, utilisez la classe, FileReader. Pour lire un fichier d'octet, utilisez la classe, fileInputStream. Les deux classes sont dans le java.Io.* package, qui doit être importé. La première moitié de cet article traite de la lecture des fichiers texte, et la seconde moitié traite de la lecture des fichiers d'octets.

Lire des fichiers texte

Construire un objet FileleReader

Avant d'apprendre à construire un objet FileReader, créez le fichier texte suivant, avec un éditeur de texte et appuyez sur la touche Entrée à la fin des deux premières lignes:

Un texte 1 un texte 1 un texte 1 un texte 1 un texte 1
B texte 2 b Texte 2 b Texte 2 b Texte 2 b Texte 2
C Texte 3 C Texte 3 C Texte 3 C Texte 3 C Texte 3

Si la touche Entrée n'est pas enfoncée à la fin de la dernière ligne, l'éditeur de texte peut ajouter une nouvelle ligne lorsque le fichier est enregistré. Après avoir produit le texte précédent, enregistrez le contenu, avec le nom temporaire.txt, en utilisant le menu de l'éditeur de texte, utilisateur @ hôte: ~ / dir1 $, dans le répertoire. Cela signifie que le répertoire, dir1, aurait dû être créé.

Construire un lecteur de fichiers

La classe FileReader a cinq constructeurs. Un seul est illustré dans cet article (afin de garder l'article court). La syntaxe du constructeur est:

Public FileReader (String Filename) lève FileNotFoundException

Ceci est créé dans la mémoire un flux (copie) du fichier, dont le chemin et le nom sont la chaîne, nom de fichier. Il lance un filenotfounonxception si le fichier n'est pas trouvé dans le répertoire indiqué. Après la copie du contenu du fichier, l'objet de fichier ouvert doit être fermé pour publier toutes les ressources système associées au fichier ouvert.

Méthodes importantes de FileReader

Si le constructeur est créé avec succès, le fichier est considéré comme ouvert. Après avoir utilisé le fichier, le fichier doit être fermé. La syntaxe pour fermer un fichier est:

public void close () lève IOException

Une fois le fichier qui vient d'être ouvert, la lecture efficace du fichier n'a pas encore eu lieu. Pour lire un caractère à la fois (un alors le suivant), utilisez la syntaxe de la méthode FileReader:

public int lien () lève ioException

Cela renvoie le caractère (comme entier) lecture ou -1 si la fin du flux (flux de copie de fichier en mémoire) a été atteinte.

Pour lire la séquence suivante des caractères du fichier, dans un tableau, utilisez la syntaxe de la méthode FileReader:

public int lic (char [] cbuf, int off, int len) lance ioexception

Il renvoie le nombre de caractères lus ou -1 si la fin du flux a été atteinte. Off dans la syntaxe signifie décalage. C'est l'index dans le fichier où la lecture de la séquence de caractères suivante est de commencer. Len est le nombre de caractères à lire. Ce devrait être la longueur du tableau, tandis que CBUF est le tableau.

N'oubliez pas que l'objet FileReader doit être fermé avec sa méthode étroite après cette lecture efficace.

La syntaxe de la méthode, pour savoir si la lecture suivante ne retournera pas -1, est:

public boolean ready () lève ioexception

Il revient vrai s'il y a quelque chose à lire et faux sinon.

Lire dans une chaîne

Le code suivant, lit le fichier précédent, caractéristique par personnage, dans une chaîne StringBuilder:

StringBuilder sb = new StringBuilder ();
essayer
FileRederfr = nouveau FileReader ("dir1 / temp.SMS");
Pendant que (FR.prêt())
char ch = (char) fr.lire();
sb.ajouter (ch);


attraper (exception e)
e.getMessage ();

Système.dehors.println (sb);

Le code commence par l'instanciation d'un objet StringBuilder, SB. Ensuite, il y a la construction d'essai. Le bloc d'essai commence par l'instanciation du fichier de fichier, fr. Et il y a la boucle while, qui itère jusqu'à ce que Ready () renvoie faux. La première déclaration de la boucle while lit et renvoie le personnage suivant comme un entier. Il doit être jeté pour char. L'instruction suivante dans la boucle while ajoute le caractère suivant de la chaîne, SB. La sortie est:

Un texte 1 un texte 1 un texte 1 un texte 1 un texte 1
B texte 2 b Texte 2 b Texte 2 b Texte 2 b Texte 2
C Texte 3 C Texte 3 C Texte 3 C Texte 3 C Texte 3

C'est exactement le contenu du fichier, mais il a ajouté une ligne supplémentaire dans l'ordinateur de l'auteur.

Lire dans un tableau

Lors de la lecture dans un tableau, le contenu du tableau doit être libéré, pour que la prochaine séquence de personnages soit lue. Le code suivant illustre ceci:

StringBuilder sb = new StringBuilder ();
essayer
FileRederfr = nouveau FileReader ("dir1 / temp.SMS");
Pendant que (FR.prêt())
char [] arr = nouveau char [5];
int offset = 0;
frousser.lire (arr, offset, 5);
offset = offset + 5;
Système.dehors.print (arr);


attraper (exception e)
e.getMessage ();

Système.dehors.println ();

La valeur du décalage doit être incrémentée pour chaque itération par la longueur du tableau. La sortie est:

Un texte 1 un texte 1 un texte 1 un texte 1 un texte 1
B texte 2 b Texte 2 b Texte 2 b Texte 2 b Texte 2
C Texte 3 C Texte 3 C Texte 3 C Texte 3 C Texte 3

C'est exactement comme le contenu du fichier, mais il a ajouté une ligne supplémentaire, dans l'ordinateur de l'auteur.

Lire des fichiers d'octets

Construire un objet FileInputStream

Le fichier image suivant est appelé barres.PNG. C'est dans le répertoire utilisateur @ hôte: ~ / dir1 $, qui est le même répertoire que Temp.SMS. Il se compose de seulement trois barres de couleur:

Construire un fichierInputStream

Un constructeur pour un objet FileInputStream est:

public FileInputStream (nom de chaîne) lève FileLoTFoundException

Puisqu'il lance une exception, il devrait être dans une construction de coups d'essai. N'oubliez pas que cette classe est pour lire les octets.

Méthodes importantes de FileInputStream

Si le constructeur est créé avec succès, le fichier est considéré comme ouvert. Après avoir lu les octets, le fichier doit être fermé, en utilisant la syntaxe suivante:

public void close () lève IOException

Une fois le fichier qui vient d'être ouvert, la lecture efficace du fichier n'a pas encore eu lieu. Pour lire un octet à la fois (un alors le suivant), utilisez la syntaxe de la méthode FileInputStream:

public int lien () lève ioException

Cela renvoie l'octet (comme entier) lecture, ou -1 si la fin du flux (flux de copie de fichier en mémoire) a été atteinte.

N'oubliez pas qu'après cette lecture efficace, l'objet FileInputStream doit être fermé, avec sa méthode étroite.

Pour avoir une estimation du nombre d'octets à lire, utilisez la syntaxe de la méthode:

public int disponible () lève ioException

Puisque cette méthode renvoie une estimation, lorsqu'elle est utilisée en conjonction avec read (), on ne peut pas être sûr que tous les octets du fichier ont été lus. Et la méthode suivante qui lit tous les octets doit être préférée:

octet public [] readallbytes () lève ioException

Cette méthode renvoie tous les octets restants mais lierait toujours le fichier entier.

Lire dans une liste Array

L'arrayList doit être importé du java.user.* emballer. Le code suivant lit une estimation de tous les octets dans un objet ArrayList:

ArrayList al = new ArrayList ();
essayer
FileInputStream FIR = new FileInputStream ("Dir1 / Bars.png ");
Pendant (sapin.disponible ()> 0)
octet bt = (octet) sapin.lire();
Al.ajouter (bt);


attraper (exception e)
e.getMessage ();

Système.dehors.println (al);

Le code commence par l'instanciation d'un objet ArrayList, Al. Ensuite, il y a la construction d'essai. Le bloc d'essai commence par l'instanciation du FileInputStream, FIR. Et il y a la boucle while, qui itère jusqu'à disponible () et suggère qu'aucun octet ne reste à lire. La première déclaration de la boucle while lit et renvoie l'octet suivant comme un entier. Il doit être jeté à un octet. L'énoncé suivant dans les ajoutes de boucle while (ajoute) le caractère suivant à la liste, Al. La sortie est:

[-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, -7, 0, 0, 0, - 10, 8, 6, 0, 0, 0, 20, 25, 33, 69, 0, 0, 0, 6, 98, 75, 71, 68, 0, -1, 0, -1, 0, -1 , -96, -67, -89, -109, 0, 0, 3, 48, 73, 68, 65, 84, 120, -100, -19, -42, 49, 74, 67, 81, 0, 68, -47, -81, -68, 52, 105, 83, -120, 85, 42, 65, -112, -12, 41, 44, 92, 64, -74, -26, 34, 92, -110, -115, -107, 32, -23, -19, 44, 4, 9, -60, 85, 60, 62, 92, -50, 89, -63, 52, 23, -26, - - 26, -70, 44, -41, 5, 104, 58, -99 - - - et continue - - -]

Les octets sont des entiers. Espérons que l'image des trois barres précédentes se compose de tous ces octets. L'idée est que le programmeur modifie certains des octets, modifie l'image, puis enregistre le résultat; puis redémarrez-le avec le spectateur d'image tout en présentant une image modifiée. Cependant, ce calendrier supplémentaire n'est pas abordé dans cet article.

Lire dans un tableau

La méthode readallbytes () renvoie un tableau d'octets. Donc, recevez simplement les valeurs de retour, avec un tableau d'octets, comme le montre le code suivant:

octet [] arr = nouveau octet [1000];
essayer
FileInputStream FIR = new FileInputStream ("Dir1 / Bars.png ");
ar = sapin.readallbytes ();

attraper (exception e)
e.getMessage ();

pour (int i = 0; iSystème.dehors.print (arr [i] + ",");
Système.dehors.println ();

Le code commence par la déclaration du tableau qui recevra les octets. La taille (longueur) ici doit être supérieure à la taille estimée. La taille estimée peut être obtenue avec la méthode disponible (). Le code principal est dans le bloc d'essai. La sortie est:

-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, -7, 0, 0, 0, -10, 8, 6, 0, 0, 0, 20, 25, 33, 69, 0, 0, 0, 6, 98, 75, 71, 68, 0, -1, 0, -1, 0, -1, - - 96, -67, -89, -109, 0, 0, 3, 48, 73, 68, 65, 84, 120, -100, -19, -42, 49, 74, 67, 81, 0, 68, -47, -81, -68, 52, 105, 83, -120, 85, 42, 65, -112, -12, 41, 44, 92, 64, -74, -26, 34, 92, -110 , -115, -107, 32, -23, -19, 44, 4, 9, -60, 85, 60, 62, 92, -50, 89, -63, 52, 23, -26, -26, -70, 44, -41, 5, 104, 58, -99, - - - et continue - - -

Cette sortie et la précédente sont les mêmes sur l'ordinateur de l'auteur.

Conclusion

Les fichiers de texte et d'octet locaux peuvent être lus. Pour lire un fichier texte, utilisez la classe Stream, FileReader. Pour lire un fichier d'octet, utilisez la classe Stream, FileInputStream. Les deux classes sont dans le java.Io.* package, qui doit être importé. Ces deux classes ont des constructeurs et des méthodes qui permettent la lecture. Nous espérons que vous avez trouvé cet article utile. Découvrez d'autres articles sur les conseils pour plus de conseils et de tutoriels.