Ignorer les premiers champs dans une série de champs

Analyser le retour de la commande LIST en FTP

Le problème exposé dans ce sujet a été résolu.

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.

+0 -0

J’ai posté mon problème ailleurs il y a quelques jours et je viens d’avoir une réponse avec une solution (qui montre que je ne connais pas très bien la bibliothèque Java ^^ ) :

Pour ignorer plusieurs espaces, tu peux utiliser une regex.

line.split("\\s+")"

Ça fonctionne, problème résolu.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte