Je voudrais déterminer le nom du fichier jar de mon code java. J'ai trouvé beaucoup de solutions dans le google, mais rien ne fonctionne. Juste pour voir ce que j'ai essayé ici est un forum de stackoverflow où un tas de solutions est posté: stackoverflowJar nom de fichier formulaire java code
J'ai Mac OS X 10.6.5.
Quand je tape java -version je reçois ce résultat:
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04-307-10M3261)
Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03-307, mixed mode)
Merci pour votre aide.
Edit: modifier mon poste pour répondre au commentaire.
Certaines des solutions me donne la valeur "null" quand je veux System.out.println le chemin et échoue aussi quand je veux créer une instance d'un fichier.
D'autres solutions quand je demande le chemin ils ne donnent pas quelque chose comme file:/.....
, à la place ils donnent quelque chose comme rsch:/
ou quelque chose comme ça, je ne sais pas exactement, mais c'est un mot simple de 4 caractères.
Edit 2: Je cours un pot exécutable à partir de la console. Et je voudrais avoir ce nom de fichier jar dans les classes qui sont dans le fichier jar exécuté.
Edit 3:
Le mot de 4 caractères est: rsrc:./
code comment je suis arrivé ceci:
File file = null;
try {
System.out.println(MyClass.class.getProtectionDomain().getCodeSource().getLocation().toURI());
} catch (URISyntaxException e) {
e.printStackTrace();
}
Edit 4: J'ai aussi essayé ce code:
package core;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class MyClass {
public String getText(String key) {
String path = "" + MyClass.class.getResource("../any.properties");
File file = new File((path).substring(5, path.length()));
Properties props = readProps(file);
return props.getProperty(key);
}
private Properties readProps(File file) {
Properties props = new Properties();
InputStream in = null;
try {
in = new FileInputStream(file);
props.load(in);
in.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return props;
}
public static void main(String[] args) {
System.out.println(new MyClass().getText("anything"));
}
}
Avec ce résultat:
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1937)
at core.PropHandler.getText(MyClass.java:14)
at core.PropHandler.main(MyClass.java:39)
... 5 more
Ce code fonctionne parfaitement dans l'éclipse, mais quand je crée le fichier jar runnable Je pense que vous pouvez voir le problème.
Le lien que vous avez posté offre quelques solutions. Vous dites "rien ne fonctionne" - pouvez-vous expliquer pourquoi ils ne fonctionnent pas? – EboMike
Jar nom de fichier de * quoi *? – bmargulies
Après les modifications, je ne pense pas que la question mérite un -1. – EboMike