2015-09-28 9 views
6

Voglio ottenere il percorso di un eseguibile lanciato in Java, se l'eseguibile è conservato in una posizione che fa parte della variabile di ambiente di Windows PATH.Come ottenere il percorso completo di un eseguibile in Java, se avviato dalla variabile di ambiente Windows PATH?

Supponiamo, ad esempio, di avviare NOTEPAD in Windows utilizzando lo snippet di codice seguente. Qui notepad.exe è conservato nella cartella Windows che fa parte della variabile di ambiente di Windows PATH. Quindi non c'è bisogno di dare il percorso completo dell'eseguibile qui.

Runtime runtime = Runtime.getRuntime();   
Process process = runtime.exec("notepad.exe"); 

Quindi la mia domanda è, come ottenere la posizione assoluta degli eseguibili/file in programmi Java (in questo caso, se notepad.exe è tenuta sotto c:\windows, dentro programma Java che ho bisogno di ottenere il percorso c:\windows), se vengono lanciati in questo modo dalle posizioni PATH?

+0

Non v'è alcun modo incorporato per fare questo. È necessario selezionare manualmente gli elementi 'PATH' e cercare' notepad.exe' in ciascuno. –

+0

'system.env (" PATH ")' forse (non ne ho idea). –

+0

Questo è fragile. Dipenderà dalla configurazione delle macchine su cui viene eseguito. – duffymo

risposta

4

Sono è alcuna funzione incorporata per effettuare questa operazione. Ma puoi trovarlo nello stesso modo in cui la shell trova gli eseguibili su PATH.

Dividere il valore della variabile PATH, iterare sulle voci, che dovrebbero essere le directory e il primo che contiene notepad.exe è l'eseguibile che è stato utilizzato.

public static String findExecutableOnPath(String name) { 
    for (String dirname : System.getEnv("PATH").split(File.pathSeparator)) { 
     File file = new File(dirname, name); 
     if (file.isFile() && file.canExecute()) { 
      return file.getAbsolutePath(); 
     } 
    } 
    throw new AssertionError("should have found the executable"); 
} 

Non ho un compilatore con me ora per verificare, ma penso che quanto sopra funzionerà.

+0

Grazie janos per il tuo aiuto. – k0der

4

È possibile ottenere la posizione di un eseguibile in Windows:

where <executable_name> 

Ad esempio:

where mspaint rendimenti:

C: \ Windows \ System32 \ MSPAINT.EXE

E il seguente codice:

Process process = Runtime.getRuntime().exec("where notepad.exe"); 
try (BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()))) { 
    File exePath = new File(in.readLine()); 
    System.out.println(exePath.getParent()); 
} 

uscita sarà:

C: \ Windows \ System32

+0

Grazie mille per il tuo aiuto. – k0der

+0

Si noti che la directory contenente l'eseguibile deve essere nella variabile d'ambiente PATH in modo che "where" la trovi. –

0
public static void main(String[] args) { 
    Module m = new Module(); 
    m.printOnDemand(); 

    Scanner sods = new Scanner(System.in); 
    Path p = Paths.get("Z:\\DIS\\Project\\Data.txt"); 
    Path p1 = Paths.get("Data.txt"); 
    int count = p.getNameCount(); 

    System.out.println("file is :" + p.toString()); 
    System.out.println("file name P:" + p.getFileName()); 
    System.out.println("Names :" + p1.getFileSystem()); 
    System.out.println("There are :" + count + " elements in the path"); 


    for(int i = 0; i < count; i++) 
    { 
     System.out.println("Element :" + i + " is " + p.getName(i)); 

    } 
} 

}

+0

Come accedere ai dati che si trovano all'interno di txt. file? – Tumi

+1

Se hai una nuova domanda, devi creare una nuova domanda e postarla. Prima di ciò assicurati di cercare se la domanda che hai è già pubblicata. – warunapww

Problemi correlati