- louk,
Bonjour tout le monde !
Je suis étudiant en L3 Informatique et pour un projet de Réseau en Java, on doit développer une application FTP type FileZilla.
Lorsque je fais la commande LIST (équivalent de ls
en console UNIX), je reçois quelque chose comme ceci :
1 2 3 4 5 | drwxr-xr-x 2 121301042 201640530 4096 Oct 07 2013 C2I drwxr-xr-x 6 121301042 201640530 4096 Mar 11 09:42 LFTP drwxr-xr-x 5 121301042 201640530 4096 Sep 05 2013 WinXp drwxr-x--- 4 121301042 500 4096 May 16 2014 public_html drwxr-xr-x 3 121301042 201640530 4096 Feb 07 19:00 tmp |
Pour récupérer le nom de fichier, qui est le dernier champ (je ne m’intéresse pas aux autres informations, je cherche simplement à mettre à jour une arborescence de fichiers dans un JTree), je me suis codé une méthode statique (que j’ai salement mis dans ma classe MainWindow qui est l’interface graphique) pour ignorer le premier champ dans une série de champs séparés par des caractères donnés :
1 2 3 4 5 6 7 8 9 10 11 12 | private static String skip(String s, String toSkip) { int length = s.length(), i; boolean found = false; for(i = 0; i < length; ++i) { if(toSkip.indexOf(s.charAt(i)) >= 0) found = true; else if(found) break; } return s.substring(i, length); } |
J’incrémente une variable i en parcourant la chaine de caractères à analyser. Dès que je trouve un espace, je mets à vrai un booléen pour signaler que j’ai atteint la prochaine séparation. Si le caractère courant ne fait pas partie des caractères de séparation et que j’avais atteint le début de la séparation, c’est que j’ai atteint la fin de cette séparation, donc je m’arrête et je renvoie le reste de la String.
Je l’utilise de cette manière pour ignorer le premier champ d’une série de champs séparés par des espaces et/ou des tabulations :
1 2 3 | String s = "drwxr-xr-x 2 121301042 201640530 4096 Oct 07 2013 C2I"; s = skip(s, " \t"); System.out.println(s); // Affiche : 2 121301042 201640530 4096 Oct 07 2013 C2I |
Ça fonctionne bien. Mais je ne sais pas trop où mettre cette méthode (mes autres classes ont chacune un autre rôle) et je ne vais pas créer une classe juste pour une méthode statique. En plus, j’ai l’impression de réinventer la roue. N’y a-t-il pas moyen de faire la même chose en utilisant intelligemment les méthodes de la classe String ?
Petite précision : entre le 3e et le 4e champ, le nombre d’espace est variable. La méthode String.split()
ne résout pas mon problème puisque j’aurai un tableau de String dont la taille ne sera pas toujours la même et ne pourrais donc pas savoir à partir de quel champ il y a le nom de mon fichier.