2013-07-17 4 views
0

Я использую класс ProcessBuilder для выполнения исполняемых файлов в Windows и Linux.Библиотека Java для поиска исполняемых файлов

Есть ли простой способ найти эти исполняемые файлы, не зная пути к исполняемому файлу.

например.

//which command functionality 
String executable = which("executable_name"); 

List<String> command = new ArrayList<String>(); 
command.add(executable); 
ProcessBuilder builder = new ProcessBuilder(command); 
.. 
.. 

Было бы здорово, если бы была функция, подобная той, что команда на linux?

Любые идеи или мне придется перебрать и проанализировать переменные PATH среды с помощью

System.getenv("PATH"); 
+1

Вы можете вызвать 'process = new ProcessBuilder (« which »,« executable_name »). Start();' и прочитать вывод (но это будет работать только с linux). – assylias

+0

Вы можете вызвать process = new ProcessBuilder («where», «executable_name»). Start(); и читать результат (но это будет работать только на окнах). :) – Jyro117

ответ

1

Используйте where команду на Windows.

WHERE [/R dir] [/Q] [/F] [/T] pattern 

Если не указать каталог поиска с помощью /R, он ищет в текущем каталоге и в путях, указанных в переменной PATH среды. Вот пример кода, который находит два местоположения, где notepad.exe проживает в Windows.

String searchCmd; 
if (System.getProperty("os.name").contains("Windows")) { 
    searchCmd = "where"; 
} else { // I'm assuming Linux here 
    searchCmd = "which"; 
} 

ProcessBuilder procBuilder = new ProcessBuilder(searchCmd, "notepad.exe"); 
Process process = procBuilder.start(); 

ArrayList<String> filePaths = new ArrayList<String>(); 
Scanner scanner = new Scanner(process.getInputStream()); 
while (scanner.hasNextLine()) { 
    filePaths.add(scanner.nextLine()); 
} 
scanner.close(); 

System.out.println(filePaths); 

Выход:

[C:\Windows\System32\notepad.exe, C:\Windows\notepad.exe] 

Примечание: Я проверил это только на Windows. Возможно, вам придется изменить (возможно, параметры команды и способ анализа , который выводит), чтобы заставить его работать в Linux.

Смежные вопросы