Répertoire courant de l'application [résolu]

Répertoire courant de l'application [résolu] - Java - Programmation

Marsh Posté le 26-12-2003 à 02:30:30    

Salut,
 
Je cherche à récupérer le répertoire d'ou est installé mon appli mais ai quelques petits problèmes.
La commande
File f = new File("." );
renvoie le répertoire d'ou est lancée l'appli et non pas le répertoire ou elle est.
 
Enfin j'ai trouvé :  
String curdir = this.class.getResource("." ).getPath();
Mais autre problème : vu que je passe par la classe java
.net.URL, si mon chemin comportait des caractères spéciaux, ils sont remplacés et le chemin n'est donc plus valide.
Exemple : "c:\Mes Documents" devient "c:\Mes%20Documents"
ce qui est très génant (FileNotFoundException).
 
Les quelques topics que j'ai vu la dessus cse terminait par "Dieu seul sait ou est l'appli" (pas très encourageant).
 
Mais il y a forcément un moyen! Lequel?
 
Edit : j'ai oublié : JOYEUX NOEL !!!!!!!!!


Message édité par yo c spi le 09-01-2004 à 15:43:58
Reply

Marsh Posté le 26-12-2003 à 02:30:30   

Reply

Marsh Posté le 26-12-2003 à 09:26:08    

yo c spi a écrit :

Mais il y a forcément un moyen! Lequel?


 
Le communiquer à ton appli via une config quelconque ou une propriété système. Il n'y a aucun moyen à priori de savoir où se trouve le répertoire home de l'appli.
 
La JVM n'a pas cette notion en standard. Elle s'occupe juste de savoir où se trouve les classes qu'elle doit utiliser.
 
Tu peux faire un truc du genre
 

Code :
  1. java -DTONAPPLI_HOME=c:/stuff/appli com.foo.MonMain args1 args2


 
et rechopper le directory en question dans l'appli
 

Code :
  1. String home = System.getProperty("TONAPPLI_HOME" );


 


Message édité par darklord le 26-12-2003 à 09:27:12
Reply

Marsh Posté le 26-12-2003 à 16:52:49    

yo c spi a écrit :


String curdir = this.class.getResource("." ).getPath();
Mais autre problème : vu que je passe par la classe java
.net.URL, si mon chemin comportait des caractères spéciaux, ils sont remplacés et le chemin n'est donc plus valide.
Exemple : "c:\Mes Documents" devient "c:\Mes%20Documents"
ce qui est très génant (FileNotFoundException).


solution magique: lire la doc des classes qu'on utilise:  
1/ essayer http://java.sun.com/j2se/1.4.2/doc [...] rnalForm()
2/ si tu utilises une URL pour ouvrir un fichier, passer une URL au constructeur de ton stream et non un chemin sous forme de String.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 26-12-2003 à 21:07:55    

String home = System.getProperty("user.dir" ); nerenvoi pas le rep d'ou est lancé l'appli ?
 
 
je test et je revien :o

Reply

Marsh Posté le 26-12-2003 à 21:17:30    

veryfree a écrit :

String home = System.getProperty("user.dir" ); nerenvoi pas le rep d'ou est lancé l'appli ?
 
 
je test et je revien :o


 
c'est pas ca la question [:kiki]

Reply

Marsh Posté le 26-12-2003 à 21:26:00    

Citation :

Je cherche à récupérer le répertoire d'ou est installé mon appli mais ai quelques petits problèmes.


 
 
l'appli est lancé a partir de la ou elle est installé non [:tinostar]

Reply

Marsh Posté le 26-12-2003 à 22:08:36    

veryfree a écrit :

Citation :

Je cherche à récupérer le répertoire d'ou est installé mon appli mais ai quelques petits problèmes.


 
 
l'appli est lancé a partir de la ou elle est installé non [:tinostar]


 
bin non [:kiki]

Reply

Marsh Posté le 27-12-2003 à 02:06:15    

veryfree a écrit :

String home = System.getProperty("user.dir" ); nerenvoi pas le rep d'ou est lancé l'appli ?

puisque manifestement darklord n'a pas su lire TA question et que tu n'as pas non plus su lire sa reponse: le user.dir renvoie le homedirectory du user qui a lancé l'appli ("/home/veryfree" ou "c:/documents and settings/veryfree", le plus souvent)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 27-12-2003 à 02:14:53    

non, sinon:

Citation :

Pouet.class.getProtectionDomain().getCodeSource().getLocation();

permet de récuperer l'emplacement du fichier qui définit la classe Pouet, si ça peut aider. (...getLocation().getFile() pour recuperer le fichier)
à mon avis à n'utiliser qu'en cas d'extreme nécessité, et preferer un concept du style de celui decrit par darklord, à savoir passer un POUET_HOME en param a l'appli.


Message édité par the real moins moins le 27-12-2003 à 02:17:45

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 27-12-2003 à 11:38:55    

the real moins moins a écrit :

puisque manifestement darklord n'a pas su lire TA question et que tu n'as pas non plus su lire sa reponse: le user.dir renvoie le homedirectory du user qui a lancé l'appli ("/home/veryfree" ou "c:/documents and settings/veryfree", le plus souvent)


 
si si j'ai lu sa question, mais comme ca ne correspondait pas à la demande initiale, j'ai simplement dit que ct pas ça
 
bon ok j'aurai pu développer :o

Reply

Marsh Posté le 27-12-2003 à 11:38:55   

Reply

Marsh Posté le 27-12-2003 à 14:54:31    

the real moins moins a écrit :

puisque manifestement darklord n'a pas su lire TA question et que tu n'as pas non plus su lire sa reponse: le user.dir renvoie le homedirectory du user qui a lancé l'appli ("/home/veryfree" ou "c:/documents and settings/veryfree", le plus souvent)


 
ca c'est user.home :o

Reply

Marsh Posté le 27-12-2003 à 15:10:29    

the real moins moins a écrit :

non, sinon:

Citation :

Pouet.class.getProtectionDomain().getCodeSource().getLocation();

permet de récuperer l'emplacement du fichier qui définit la classe Pouet, si ça peut aider. (...getLocation().getFile() pour recuperer le fichier)
à mon avis à n'utiliser qu'en cas d'extreme nécessité, et preferer un concept du style de celui decrit par darklord, à savoir passer un POUET_HOME en param a l'appli.

Le problème c'est que si le .class est dans un .jar, ça renvoie le path du .jar, ou le path a l'intérieur du .jar ?


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 27-12-2003 à 17:11:38    

R3g a écrit :

Le problème c'est que si le .class est dans un .jar, ça renvoie le path du .jar, ou le path a l'intérieur du .jar ?

le jar ou peut etre si t'es chanceux les deux (....machin.jar!com/pouet/truc/Muche)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 27-12-2003 à 17:16:01    

the real moins moins a écrit :

le jar ou peut etre si t'es chanceux les deux (....machin.jar!com/pouet/truc/Muche)


Un point d'exclamation [:totoz] Et ça marche comment le jour où y a un ! dans le nom de fichier ? :D


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 27-12-2003 à 17:17:59    

Taiche a écrit :


Un point d'exclamation [:totoz] Et ça marche comment le jour où y a un ! dans le nom de fichier ? :D

i t'es chanceux j'ai dit. mais jcrois que c pas le cas, il donne que le .jar
le ! je sors ça d'un vague souvenir ou j'ai vu que ça s'écrivait comme ça pour je sais plus quoi.
et le ! etant apres l'extension .jar ça va pas se confondre avec un ! qui serait dans ton nom de fichier


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 27-12-2003 à 17:21:27    

the real moins moins a écrit :

i t'es chanceux j'ai dit. mais jcrois que c pas le cas, il donne que le .jar
le ! je sors ça d'un vague souvenir ou j'ai vu que ça s'écrivait comme ça pour je sais plus quoi.
et le ! etant apres l'extension .jar ça va pas se confondre avec un ! qui serait dans ton nom de fichier


 
et qu'est ce qui se passe si le nom de fichier comporte .jar! [:totoz]
 
[:neowen]

Reply

Marsh Posté le 27-12-2003 à 17:21:27    

Mettre un fichier machin.jar! dans un classpath, ça marchera pas ?


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 27-12-2003 à 17:24:21    

darklord a écrit :


 
et qu'est ce qui se passe si le nom de fichier comporte .jar! [:totoz]
 
[:neowen]

ben c'est pas un jar valide :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 27-12-2003 à 17:24:47    

Taiche a écrit :

Mettre un fichier machin.jar! dans un classpath, ça marchera pas ?

si mais il sera sans doute pas considéré comme un jar, au meme titre que si tu mets un moncul.jpg


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 27-12-2003 à 17:26:21    

C'est pas drôle, alors :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 27-12-2003 à 18:13:27    

the real moins moins a écrit :

si mais il sera sans doute pas considéré comme un jar, au meme titre que si tu mets un moncul.jpg

et jar!jar.jar, c'est valide ?


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 27-12-2003 à 18:27:13    

euh c'est quoi la question à la base? si t'as envie de t'amuser à foutre des noms à la con à tes jars pour voir jusqu'ou tu peux aller, libre à toi hein :heink:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 27-12-2003 à 18:31:02    

Taiche a écrit :


Un point d'exclamation [:totoz] Et ça marche comment le jour où y a un ! dans le nom de fichier ? :D

La question c'est ça. Après l'interet est je l'avoue un peu limité, c'est juste que ça semble un peu bizarre..


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 27-12-2003 à 18:39:43    

bah essaie si ça t'interesse [:spamafote]
déjà, je pense que la methode que j'ai donnée ne renvoie pas ce genre d'url, mais juste celle du jar, donc...


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 29-12-2003 à 22:05:34    

he, au fait, veryfree avait raison avec user.home !


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 29-12-2003 à 23:21:03    

the real moins moins a écrit :

he, au fait, veryfree avait raison avec user.home !


 
voui :jap:
meme si ca ne répond pas à la question


Message édité par darklord le 29-12-2003 à 23:21:20
Reply

Marsh Posté le 29-12-2003 à 23:25:49    

bah ça renvoie l'endroit d'ou à été lancée la vm, donc bon, au pire tu fais un "/.." si tu sais que ton appli est lancée dans APPLI_HOME/bin, par exemple.
ça peut etre un méchanisme qui me semble correct, si on l'utilise en "failover" (?) d'une variable "APP_HOME" qui serait passée a l'appli (ie si la variable n'est pas passée, alors on utilise ce procédé par défaut)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 29-12-2003 à 23:41:26    

the real moins moins a écrit :

he, au fait, veryfree avait raison avec user.home !


 
[:yaisse]

Reply

Marsh Posté le 29-12-2003 à 23:51:26    

the real moins moins a écrit :

bah ça renvoie l'endroit d'ou à été lancée la vm, donc bon, au pire tu fais un "/.." si tu sais que ton appli est lancée dans APPLI_HOME/bin, par exemple.


 
[:kiki]
ouais si tu as le script qui va bien mais si tu peux lancer l'appli depuis n'importe quel rep ca va pas le faire :o

Reply

Marsh Posté le 29-12-2003 à 23:52:29    

darklord a écrit :


 
[:kiki]
ouais si tu as le script qui va bien mais si tu peux lancer l'appli depuis n'importe quel rep ca va pas le faire :o

:??: :heink:
 
(si t'as un raccourci ou quoi ailleurs, tu crois que le user.home va etre dans le "repertoire de travail" de ce raccourci et non celui ou se trouve ce sur quoi le raccourci pointe?)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 30-12-2003 à 00:03:54    

si il ne fait pas un cd APPLI_HOME/bin explicite, oui.

Reply

Marsh Posté le 30-12-2003 à 00:15:05    

ha, crotte :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 02-01-2004 à 09:49:06    

http://forum.hardware.fr/forum2.ph [...] 0&subcat=0
 
Voir le code posté par "phenixl"

Reply

Marsh Posté le 07-01-2004 à 14:41:18    

Je vais tester tout ca et je vous redis.
Merci, y'a pas mal de trucs.
Bonne année !

Reply

Marsh Posté le 09-01-2004 à 15:43:15    


Ce code est excellent et pourra etre bien utile.
 
Merci à tous.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed