Come ottenere il percorso dell’esecuzione del programma java

C’è un modo per ottenere il percorso della class principale del programma java in esecuzione.

la struttura è

D:/ |---Project |------bin |------src 

Voglio ottenere il percorso come D:\Project\bin\ .

Ho provato 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 

C’è un modo per fare questo?



===== EDIT =====

Ho la soluzione qui

  • Soluzione 1

Di 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 stampato:

 file:/C:/Users/Jon/Test/foo/Test.class 

  • Soluzione 2

Di 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()); 

Nota che la maggior parte dei file di class sono assemblati in file JAR, quindi questo non funzionerà in ogni caso (da qui l’ IllegalStateException ). Tuttavia, puoi individuare il JAR che contiene la class con questa tecnica e puoi ottenere il contenuto del file di class sostituendo una chiamata a getResourceAsStream() al posto di getResource() , e ciò funzionerà indipendentemente dal fatto che la class sia sul file system o in un JAR.

Prova questo codice:

 final File f = new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath()); 

sostituisci ” MyClass ” con la tua class contenente il metodo principale.

In alternativa puoi anche usare

 System.getProperty("java.class.path") 

La proprietà di sistema sopra menzionata fornisce

Percorso utilizzato per trovare le directory e gli archivi JAR contenenti i file di class. Gli elementi del percorso di class sono separati da un carattere specifico della piattaforma specificato nella proprietà path.separator.

Uso

 System.getProperty("java.class.path") 

vedi http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html

Puoi anche dividerlo facilmente nei suoi elementi

 String classpath = System.getProperty("java.class.path"); String[] classpathEntries = classpath.split(File.pathSeparator); 

In realtà non vuoi ottenere il percorso verso la tua class principale. Secondo il tuo esempio, vuoi ottenere la directory di lavoro corrente, cioè la directory in cui è stato avviato il tuo programma. In questo caso puoi semplicemente dire new File(".").getAbsolutePath()

  ClassLoader cl = ClassLoader.getSystemClassLoader(); URL[] urls = ((URLClassLoader)cl).getURLs(); for(URL url: urls){ System.out.println(url.getFile()); }