257 votes

Quoi de plus simple pour lire un fichier en chaîne ?

Je suis en train de lire un simple fichier texte dans une Chaîne de caractères. Bien sûr, il est habituel de manière à obtenir des flux d'entrée et d'itération avec readLine() et de lire le contenu dans la Chaîne.

Ayant fait des centaines de fois dans le passé, je me demandais comment puis-je faire cela en un minimum de lignes de code? N'est-il pas quelque chose en java comme String fileContents = XXX.readFile(myFile/*File*/) .. plutôt quelque chose qui ressemble aussi simple que cela?

Je sais qu'il y a des bibliothèques comme Apache Commons IO qui fournissent de telles simplifications ou même je peux écrire une simple Util classe pour ce faire. Mais tout ce que je me demande est - ce si fréquent opération que tout le monde a besoin alors pourquoi ne pas Java fournir une telle fonction simple? N'est-ce pas vraiment une méthode unique quelque part pour lire un fichier en chaîne par un défaut ou d'encodage spécifié?

350voto

polygenelubricants Points 136838

Oui, vous pouvez le faire en une seule ligne (bien que robuste IOException manutention vous ne voulez pas).

String content = new Scanner(new File("filename")).useDelimiter("\\Z").next();
System.out.println(content);

Il utilise un java.util.Scanner, en disant qu'il délimiter l'entrée avec \Z, qui est la fin de la chaîne de l'ancre. Finalement, cela rend l'entrée ont un seul jeton, qui est la totalité du fichier, de sorte qu'il peut être lu avec un appel à l' next().

Il y a un constructeur qui prend un File et String charSetName (parmi de nombreux autres surcharges). Ces deux constructeur peut jeter FileNotFoundException, mais comme tous Scanner méthodes, n' IOException peut être projeté au-delà de ces constructeurs.

Vous pouvez interroger l' Scanner lui-même par l' ioException() méthode si un IOException s'est produite ou non. Vous pouvez également explicitement close() le Scanner après avoir lu le contenu, peut-être, le stockage de l' Scanner référence dans une variable locale est le meilleur.

Voir aussi

Questions connexes


La troisième partie de la bibliothèque des options

Pour être complet, ce sont de très bonnes options si vous avez ces très réputés et très utile tiers des bibliothèques:

Goyave

com.google.common.io.Files contient de nombreuses méthodes utiles. Pertinentes ici sont:

Apache Commons/IO

org.apache.commons.io.IOUtils offrent également des fonctionnalités similaires à:

  • String toString(InputStream, String encoding)
    • En utilisant le caractère spécifié à l'encodage, obtient le contenu d'un InputStream comme String
  • List readLines(InputStream, String encoding)
    • ... un (brut) List de String, une entrée par ligne

Questions connexes

191voto

Jim Points 1242

À partir de Java 7 (Description de l’API) , vous pouvez faire :

``

Où filePath est une chaîne qui représente le fichier vous souhaitez charger.

42voto

Rakesh Goyal Points 783

Vous pouvez utiliser commons apache IO...

10voto

Jon Skeet Points 692016

Ne pas écrire votre propre util classe pour ce faire, je vous conseille d'utiliser la Goyave, qui est plein de toutes sortes de bonté. Dans ce cas, vous voulez soit l' Files de la classe (si vous êtes vraiment juste de la lecture d'un fichier) ou CharStreams pour plus d'usage général la lecture. Il a des méthodes pour lire les données dans une liste de chaînes de caractères (readLines) ou totale (toString).

Il possède les mêmes méthodes utiles pour des données binaires. Et puis il y a le reste de la bibliothèque...

Je suis d'accord c'est ennuyeux qu'il n'y a rien de semblable dans les bibliothèques standard. Heck, juste être capable de fournir un CharSet d'un FileReader permettrait de rendre la vie un peu plus simple...

7voto

Bhuvan Gupta Points 61

Une autre approche alternative est:

Comment créer un Java Chaîne à partir du contenu d'un fichier?

Autre option consiste à utiliser des utilitaires fournis bibliothèques open source
http://commons.apache.org/io/api-1.4/index.html?org/apache/commons/io/IOUtils.html

Pourquoi java ne fournit pas un tel commun util API ?
a) pour garder l'Api générique, de sorte que l'encodage, la mise en mémoire tampon etc est gérée par le programmeur.
b) rendre les programmeurs faire un peu de travail et d'écriture/share opensource util bibliothèques :D ;-)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X