Java: Comment lire un fichier texte
Je veux lire un fichier texte contenant l'espace de valeurs séparées. Les valeurs sont des nombres entiers.
Comment puis-je le lire et de le mettre dans un tableau la liste?
Voici un exemple de contenu du fichier texte:
1 62 4 55 5 6 77
Je veux l'avoir dans une liste de tableaux comme [1, 62, 4, 55, 5, 6, 77]
. Comment puis-je le faire en Java?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
Fichiers#readAllLines()
pour obtenir toutes les lignes d'un fichier texte dans unList<String>
.Tutoriel: E/S de base > Fichier I/O > de la Lecture, de l'Écriture et de Création de fichiers texte
Vous pouvez utiliser
String#split()
pour diviser unString
dans les pièces en se basant sur une expression régulière.Tutoriel: Des nombres et des Chaînes > Cordes > Manipuler des Caractères dans une Chaîne
Vous pouvez utiliser
Integer#valueOf()
pour convertir unString
dans unInteger
.Tutoriel: Des nombres et des Chaînes > Cordes > la Conversion entre les Nombres et les Chaînes de caractères
Vous pouvez utiliser
Liste#add()
pour ajouter un élément à unList
.Tutoriel: Interfaces > La Liste de l'Interface
Alors, en un mot (en supposant que le fichier ne possède pas de lignes vides, ni de fuite/leader des espaces).
Si vous arrive d'être à la Java 8 déjà, alors vous pouvez même utiliser Flux API pour cela, à commencer par
Fichiers#lignes()
.Tutoriel: Traitement de données avec Java 8 flux
Java 1.5 introduit la Scanner classe pour la gestion des entrées à partir d'un fichier et de ruisseaux.
Il est utilisé pour obtenir des nombres entiers à partir d'un fichier et ressemblerait à quelque chose comme ceci:
Vérifier l'API si. Il y a beaucoup plus d'options pour faire face aux différents types de sources d'entrée, différents délimiteurs, et les différents types de données.
Cet exemple de code montre comment lire le fichier en Java.
Oeil à cet exemple, et essayez de faire votre propre:
Juste pour le fun, voici ce que je ferais probablement dans un projet réel, où je suis déjà à l'aide de tous mes préférés bibliothèques (dans ce cas Goyave, anciennement connu sous le Google Collections).
Avantage: Pas beaucoup de code à maintenir (contraste avec, par exemple,cette). Modifier: Même s'il est intéressant de noter que dans ce cas tschaible du Scanner solution n'a plus de code!
Inconvénient: manifestement, vous ne voudrez pas ajouter de nouvelles dépendances de la bibliothèque juste pour cela. (là encore, il serait bête de ne pas faire usage de Goyave dans vos projets. 😉
Utilisation Apache Commons (IO et Lang) pour une simple/commune des choses comme ça.
Importations:
Code:
Fait.
À l'aide de Java 7 pour lire les fichiers avec NIO.2
Importer ces packages:
C'est le processus de lecture d'un fichier:
Pour lire toutes les lignes d'un fichier à la fois:
Toutes les réponses jusqu'à présent compte tenu de la lecture du fichier ligne par ligne, en prenant la ligne en tant que
String
, puis le traitement de laString
.Il n'y a aucun doute que c'est l'approche la plus facile à comprendre, et si le fichier est assez court (par exemple, des dizaines de milliers de lignes), il va également être acceptable en termes d'efficacité. Mais si le fichier est long, c'est un moyen inefficace de le faire, pour deux raisons:
String
, et une fois dans son traitement.String
pour chaque ligne, puis de le jeter quand vous passez à la ligne suivante. Le garbage collector finira par se débarrasser de tous cesString
objets que vous ne voulez pas de plus. Quelqu'un a eu à nettoyer après vous.Si vous vous souciez de vitesse, vous êtes beaucoup mieux de la lecture d'un bloc de données et le traitement octet par octet plutôt que ligne par ligne. Chaque fois que vous arrivez à la fin d'un nombre, vous l'ajouter à la
List
vous êtes en train de construire.Il va sortir quelque chose comme ceci:
Le code ci-dessus suppose que c'est le code ASCII (bien qu'il peut être facilement modifié pour d'autres codages), et que tout ce qui n'est pas un chiffre (en particulier, un espace ou un saut de ligne) représente une frontière entre les chiffres. Il suppose également que le fichier se termine par un chiffre (dans la pratique, que la dernière ligne se termine par un saut de ligne), même si encore une fois, il pourrait être modifié pour traiter le cas où il ne l'est pas.
C'est beaucoup, beaucoup plus rapide que tout le
String
basée sur des approches aussi étant donné que les réponses à cette question. Il y a une enquête détaillée de la très semblable à la question dans cette question. Vous allez voir qu'il y a la possibilité de l'améliorer encore plus loin si vous voulez aller en bas de la multi-thread ligne.lire le fichier, puis faire ce que vous voulez
java8
Les fichiers.lignes(les Chemins d'accès.get("c://lines.txt")).recueillir des(Collectionneurs.toList());