ReadFileLines

leplutonien Messages postés 21 Date d'inscription mardi 31 juillet 2012 Statut Membre Dernière intervention 29 juin 2015 - 28 juin 2015 à 23:30
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 29 juin 2015 à 19:36
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/101077-readfilelines

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 127
29 juin 2015 à 19:36
Bonjour,

Plusieurs remarques :
  • Tu utilises les classes Hashtable et Enumeration qui ne devraient plus être utilisées depuis Java 2 et l'apparition de HashMap et Iterator !
  • Tu fais une Hashtable<Integer,String> où les clés sont contiguës (tu les utilises toutes de 1 à n), tu réinventes donc le tableau de String... Il aurait été plus adapté d'utilisé un ArrayList<String> ce qui t'aurais en plus permis d'éviter la deuxième boucle qui réécrit chaque ligne de la Hashtable dans ton String[]
  • Ta lecture du FileReader est vraiment pas optimisée du tout, tu fais la lecture caractère par caractère, stocké dans un tableau... on peut clairement faire mieux !
  • Attention, tu considères que la fin de ligne opère quand tu as 'n' mais c'est '\n' le saut de ligne. Sans oublier que sur Windows tu peux avoir un retour chariot \r aussi.
  • Encore de l'optimisation : un String est immuable, il ne peut pas être modifié si tu fais une concaténation line+=lu[0]; cela va créer un nouvel objet String, donc comme tu fais ça à chaque caractère, ça veut dire que tu vas créer autant d'objet String qu'il y a de caractères dans le fichier ! Il faut utiliser un StringBuilder.
  • Il ne faut jamais cacher les Exception, si tu fais un try/catch l'affichage de l'erreur doit être accompagnée de l'exception. "Problème lors de la lecture du fichier spécifiée", ok il y a un problème mais lequel ?
  • Quant à ta "classe" elle ne sert à rien, les attributs path et fileLines auraient eu plus de sens en tant que paramètre et résultat de la méthode extractLines qui aurait été static.

Pour information, ce que tu as fait existe déjà tout fait dans l'API standard de Java :

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class ReadFileLines {
	
    public static List<String> extractLines(String path) throws IOException {
    	return Files.readAllLines(Paths.get(path));
    }
}

C'est évidement plus court, optimisé... et sans erreur !
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
29 juin 2015 à 13:01
Certes, mais c'est dans la partie description que ce serait bien, donc merci de mettre à jour.
leplutonien Messages postés 21 Date d'inscription mardi 31 juillet 2012 Statut Membre Dernière intervention 29 juin 2015
29 juin 2015 à 10:20
Classe permettant de lire les lignes d'un fichier
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
29 juin 2015 à 07:11
Bonjour, un petit descriptif de l'utilité de ce snippet serait le bienvenu
Rejoignez-nous