Utiliser le Fichier ou FileReader avec Scanner?
Avertissement: j'ai regardé à travers toutes les questions que je peux trouver et aucun d'eux ne répond à cette question exacte. Si vous en trouvez une, merci de m'indiquer et d'être poli.
Donc, le Oracle I/O tutoriel ouvre un fichier texte avec Scanner comme suit:
new Scanner(BufferedReader(FileReader("xanadu.txt")));
Mais la Javadoc ouvre un fichier texte avec Scanner comme ceci:
new Scanner(new File("myNumbers"));
Il serait bien d'utiliser la méthode la plus simple, surtout quand j'ai un fichier de petite taille et peut vivre avec le plus petit tampon, mais j'ai aussi vu des gens dire que lorsque vous ouvrez un Fichier directement vous ne peut pas la fermer. Si c'est le cas, pourquoi est-ce que le langage utilisé dans les documents officiels?
Edit: j'ai aussi vu new Scanner(FileReader("blah.txt"));
mais cela semble être le pire des deux mondes.
Edit: je ne cherche pas à lancer un débat sur l'opportunité d'utiliser le Scanner ou pas. J'ai une question sur la façon d'utiliser le Scanner. Merci.
OriginalL'auteur orbfish | 2012-01-26
Vous devez vous connecter pour publier un commentaire.
On pourrait considérer la mise en œuvre de Scanner (JDK est livré avec le code source). Il y a une méthode close() dans la classe Scanner. Essentiellement deux approches que vous avez énumérés sont identiques pour votre cas d'utilisation de la lecture de petits fichiers il suffit de ne pas oublier d'appeler close() à la fin.
Oui, si vous passez du Fichier à Scanner constructeur il est utilisé pour ouvrir le volet de fermeture lors de l'appel de Scanner.la méthode close (). N'importe quel constructeur vous utilisez si vous appelez close() correctement (par exemple, à partir de try/finally), alors il serait bien fermé.
OriginalL'auteur maximdim
La
File
classe n'a pas declose()
méthode, car il ne les résumés d'un fichier de disque. Il n'est pas un flux d'entrée pour le fichier, donc il n'y a rien à proximité.Vous ne laissez rien traîner. Le Fichier de classe est juste une information titulaire d'un fichier physique. Ce n'est pas un descripteur de fichier.
OriginalL'auteur Tudor
Oui vous pouvez le faire.
Fondamentalement, vous faites:
Pour lire une Chaîne de caractères:
Lorsque vous avez terminé avec le fichier, faites
OriginalL'auteur Jim Gao
Chevaux pour les cours. À partir du Scanner javadoc, un Scanner est "Un simple texte scanner qui peut analyser les types primitifs et les chaînes à l'aide expressions régulières." Donc, de mon point de vue sur votre question est: il n'est pas question que l'approche que vous utilisez, l'option plus simple avec Fichier est seulement aussi bon que celui que l'on trouve dans Oracle tutoriels. Le Scanner est très pratique pour les jetons de fichiers texte, et si votre fichier est petit, comme vous l'avez dit, que c'est un ajustement parfait.
Parce qu'un Scanner utilise des expressions régulières, vous ne pouvez pas vraiment s'attendre à des performances avec elle, si vous créez un tampon lecteur de fichier pour le scanner ou pas. Le sous-jacent Lisible sera close()d (si c'est un Fermer, dont il sera, si vous utilisez le Scanner(Fichier) constructeur), et donc vous n'avez pas à vous inquiéter, tant que vous close() de votre Scanner un objet (ou utiliser try-with-resources).
OriginalL'auteur Peter Perháč
Il y a plusieurs façons de construire un Scanner objet.
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html
Personnellement, je n'aurais même pas utiliser le Scanner pour la lecture des fichiers. Regardez BufferedReader tutoriels. Il n'est pas trop difficile à comprendre.
docs.oracle.com/javase/tutorial/essential/io/scanning.html
Oui, je l'ai lu, n'est-ce pas la réponse à ma question, qui vous le savez si vous avez lu ma question!
OriginalL'auteur bdabmxican