Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/07/2009, à 10:49

sofianinho88

Paramètres à passer pour un .JAR

Bonjour tout le monde,
Je travaille sur eclipse 4.2 ganymede, mais le problème ne situe pas sur l'IDE;
J'ai un .JAR assez simple à faire fonctionner, dés qu'on lui passe le chemin d'un dossier comme argument, il liste le contenu
du dossier (le premier niveau selement, pas de manière récursive);
le problème c'est que je n'arrive pas à lui faire passer ce paramètre en ligne de commande linux;
si je suis dans un dossier particulier et que je lance ce .JAR ; il liste le contenu de ce dossier alors qu'il ignore tout paramètre venant aprés, voici le code de mon appli :

/**
 * Cette classe liste le contenu d'un dossier et l'affiche
 * c'est une application console
 */
package listingDeDossier;
import com.bruceeckel.util.*;
import java.io.*;
import java.util.*;
public class Lister {
	public static void main (String[]  args){
		File dossier = new File (".");
		String[] fichiers_du_dissier;
			if (args.length == 0)
				fichiers_du_dissier = dossier.list();
			else
				fichiers_du_dissier = dossier.list(new FiltreDossier(args[0]));
			Arrays.sort(fichiers_du_dissier, new AlphabeticComparator());
			for (int i=0; i<fichiers_du_dissier.length; i++){
				System.out.println(fichiers_du_dissier[i]);
			}
				
	}

}

/**
 * Cette classe redéfinit la méthode accepte, cette méthode est appelée par 
 * la méthode list , si un filtre est appliqué. i.e : un nom de dossier à lister est donné
 * et ceci si l'appel au JAR est donné avec un paramètre 
 */
class FiltreDossier implements FilenameFilter{
	String afn;
	FiltreDossier (String afn) {this.afn = afn;}
	public boolean accept (File dossier, String nom){
		String f = new File(nom).getName();
		return f.indexOf(afn)!= -1;
	}
}

voici quelques commandes que j'ai exécuté et qui ont échoué :

java -jar fichiers.jar -r "/home/sofiane"
java -jar fichiers.jar -args "/home/sofiane"
java -jar fichiers.jar < "/home/sofiane"

Le listing est effectué pour le dossier courant seulement (là ou se trouve le .JAR), il ignore donc les paramètres;
En vous remerciant d'avance pour toute tentative d'aide;
Amicalement.


Résoudre les problèmes d'autrui pour mieux apprendre à résoudre les siens ...

Hors ligne

#2 Le 06/07/2009, à 16:53

alexduf

Re : Paramètres à passer pour un .JAR

java -jar fichiers.jar "/home/sofiane"

Tout simplement :o)

Dernière modification par alexduf (Le 06/07/2009, à 16:53)

Hors ligne

#3 Le 06/07/2009, à 17:01

sofianinho88

Re : Paramètres à passer pour un .JAR

Hey alexduf,
merci de ta réponse, je sais que la question peut parraitre bête ( ça l'est probablement);
mais comme t'as vu en haut j'ai pas mal ramer pour executer differentes commandes y compris la tienne. Le résultat est le même, ça accepte la commande (syntaxe correcte) mais il y a juste un saut (genre, pas de résultat) voilà :

sofiane@sofiane-laptop:~$ java -jar fichiers.jar "/home/sofiane"
sofiane@sofiane-laptop:~$

Donc, si tu me confirmes que tu as déjà travaillé avec cette manière ( un jar dont tu passe le paramètre en ligne de commande) alors le problème sera le code lui même ( donc mon problème wink )
Thanx in advace,
see ya wink


Résoudre les problèmes d'autrui pour mieux apprendre à résoudre les siens ...

Hors ligne

#4 Le 07/07/2009, à 20:23

alexduf

Re : Paramètres à passer pour un .JAR

Salut sofianinho88

Je te confirme, pour lancer un jar avec des paramètres, il suffit bien de les faire ajouter à la suite du nom du jar.

J'ai jeté un oeil à ton code, et je pense effectivement que ça vient de là.
Je me suis permis de le corriger, sans tester :

/**
 * Cette classe liste le contenu d'un dossier et l'affiche
 * c'est une application console
 */
package listingDeDossier;
import com.bruceeckel.util.*;
import java.io.*;
import java.util.*;
public class Lister {
    public static void main (String[]  args){
        File dossier = new File ("."); // on définit la valeur par défaut si les paramètres sont pas bon
        String[] fichiers_du_dissier;
            if (args.length == 1) {
                dossier = new File (args[1]); // les paramètres sont ok, on définit le dossier à lister
            }

            fichiers_du_dissier = dossier.list(new FiltreDossier(args[0])); // dans tous les cas on applique le filtre

            Arrays.sort(fichiers_du_dissier, new AlphabeticComparator());
            for (int i=0; i<fichiers_du_dissier.length; i++){
                System.out.println(fichiers_du_dissier[i]);
            }
                
    }

}

/**
 * Cette classe redéfinit la méthode accepte, cette méthode est appelée par 
 * la méthode list , si un filtre est appliqué. i.e : un nom de dossier à lister est donné
 * et ceci si l'appel au JAR est donné avec un paramètre 
 */
class FiltreDossier implements FilenameFilter{
    public boolean accept (File dossier, String nom){
        return dossier.isDirectory(); // je suis allé au plus simple
    }
}

J'ai fais en fonction de ce que j'avais compris du besoin, je n'ai pas pris la peine de vérifier si ça compilait ou pas, c'était juste pour donner un chemin.

Bonne continuation !

Hors ligne

#5 Le 07/07/2009, à 20:49

sofianinho88

Re : Paramètres à passer pour un .JAR

Hey alexduf,
Je te remercie pour l'interet, super sympa de ta part,
les modifications que tu as apporté m'ont effectivement mis sur la bonne voie, à part une ou deux retouches , Voici la derniere version donc qui marche quand on exécute la commande (comme l'a décrite alexduf)

java -jar fichiers2.jar "/home"  (ou n'importe quel autre dossier à lister)

et voici donc le code pour ceux  qui s'y interessent :

/**
 * Cette classe liste le contenu d'un dossier et l'affiche
 * c'est une application console
 */
package listingDeDossier;
import com.bruceeckel.util.*;
import java.io.*;
import java.util.*;
public class Lister2 {
    public static void main (String[]  args){
        File dossier = new File ("."); // on définit la valeur par défaut si les paramètres sont pas bon
        String[] fichiers_du_dissier;
            if (args.length == 1) {
                dossier = new File (args[0]); // les paramètres sont ok, on définit le dossier à lister
            }

            fichiers_du_dissier = dossier.list(new FiltreDossier2(args[0])); // dans tous les cas on applique le filtre

            Arrays.sort(fichiers_du_dissier, new AlphabeticComparator());
            for (int i=0; i<fichiers_du_dissier.length; i++){
                System.out.println(fichiers_du_dissier[i]);
            }
                
    }

}

/**
 * Cette classe redéfinit la méthode accepte, cette méthode est appelée par 
 * la méthode list , si un filtre est appliqué. i.e : un nom de dossier à lister est donné
 * et ceci si l'appel au JAR est donné avec un paramètre 
 */
class FiltreDossier2 implements FilenameFilter{
	String afn;
	FiltreDossier2 (String afn) {this.afn = afn;}
    public boolean accept (File dossier, String nom){
        return dossier.isDirectory(); // je suis allé au plus simple
    }
}

Un grand merci à toi, alexduf
see ya wink

Dernière modification par sofianinho88 (Le 07/07/2009, à 20:51)


Résoudre les problèmes d'autrui pour mieux apprendre à résoudre les siens ...

Hors ligne

#6 Le 08/07/2009, à 17:23

alexduf

Re : Paramètres à passer pour un .JAR

De rien !

Si tu veux être perfectionniste, tu peux retirer le paramètre au constructeur de la classe FiltreDossier2.
En effet tu stockes un attribut (afn) que tu n'utilises jamais.

Donc la construction donnerait :

fichiers_du_dissier = dossier.list(new FiltreDossier2());

et la classe :

class FiltreDossier2 implements FilenameFilter{
    public boolean accept (File dossier, String nom){
        return dossier.isDirectory(); // je suis allé au plus simple
    }
}

Hors ligne

#7 Le 08/07/2009, à 23:38

sofianinho88

Re : Paramètres à passer pour un .JAR

Hey,
Absolument, c'est ce que je viens de faire;
merci encore et bonne continuation.

Dernière modification par sofianinho88 (Le 08/07/2009, à 23:38)


Résoudre les problèmes d'autrui pour mieux apprendre à résoudre les siens ...

Hors ligne