C'è un modo per ottenere il percorso della classe principale del programma java in esecuzione.Come ottenere il percorso del programma java in esecuzione
struttura è
D:/
|---Project
|------bin
|------src
voglio ottenere il percorso come D:\Project\bin\
.
ho cercato System.getProperty("java.class.path");
ma il problema è, se corro come
java -classpath D:\Project\bin;D:\Project\src\ Main
Output
Getting : D:\Project\bin;D:\Project\src\
Want : D:\Project\bin
Esiste un modo per fare questo?
===== ===== EDIT
Ottenuto soluzione qui
Con Jon Skeet
package foo;
public class Test
{
public static void main(String[] args)
{
ClassLoader loader = Test.class.getClassLoader();
System.out.println(loader.getResource("foo/Test.class"));
}
}
Questo stampata:
file:/C:/Users/Jon/Test/foo/Test.class
By Erickson
URL main = Main.class.getResource("Main.class");
if (!"file".equalsIgnoreCase(main.getProtocol()))
throw new IllegalStateException("Main class is not stored in a file.");
File path = new File(main.getPath());
Si noti che la maggior parte dei file di classe sono assemblati in file JAR, quindi questo non funzionerà in ogni caso (da qui il IllegalStateException
). Tuttavia, è possibile individuare il JAR che contiene la classe con questa tecnica e ottenere il contenuto del file di classe sostituendo una chiamata a getResourceAsStream()
al posto di getResource()
e ciò funzionerà indipendentemente dal fatto che la classe si trovi nel file system o in un JAR.
Beh si potrebbe sempre tokenize il risultato (taglio attorno al ";" che separa le voci). La proprietà classpath contiene in genere diverse voci (ad esempio librerie in uso e così via). Forse dovresti ripensare alle tue esigenze. Se sei interessato solo a una cartella, sei sicuro che l'analisi del classpath sia una buona idea? – Matthias
@Matthias Si noti che il separatore del percorso è diverso su piattaforme diverse. È meglio usare 'System.getProperty (" path.separator ");' –
http://stackoverflow.com/a/778246/1862502 –