Я хотел бы определить имя файла jar из моего кода java. Я нашел много решений в Google, но ничего не работает. Просто чтобы посмотреть, что я попробовал, это форум stackoverflow, на котором опубликовано множество решений: stackoverflow
У меня Mac OS X 10.6.5.
Когда я набираю java -version, я получаю такой результат:
java version "1.6.0_22"<br>
Java(TM) SE Runtime Environment (build 1.6.0_22-b04-307-10M3261)<br>
Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03-307, mixed mode)
Спасибо за вашу помощь.
Edit:
Я редактирую свой пост, чтобы ответить за комментарий.
Некоторые из решений дают мне «нулевое» значение, когда я хочу указать путь к System.out.println, а также не выполняются, когда я хочу создать экземпляр файла.
Другие решения, когда я спрашиваю путь, они не дают что-то вроде file:/.....
, вместо этого они дают что-то вроде rsch:/
или что-то вроде этого, я точно не знаю, но это простое слово из 4 символов.
Редактировать 2:
Я запускаю исполняемый файл из консоли. И я хотел бы иметь это имя файла JAR в классах, которые находятся в исполняемом файле JAR.
Редактировать 3:
Слово из 4 символов: rsrc:./
Код, как я получил это:
File file = null;
try {
System.out.println(MyClass.class.getProtectionDomain().getCodeSource().getLocation().toURI());
} catch (URISyntaxException e) {
e.printStackTrace();
}
Редактировать 4:
Я также попробовал этот код:
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"));
}
}
С таким результатом:
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
Этот код отлично работает в затмении, но когда я создаю исполняемый файл JAR, я думаю, что вы можете увидеть проблему.