2013-03-20 6 views
10

Mogę wydrukować ścieżkę przy użyciu System.getenv("PATH"). Wtedy prawdopodobnie mogę przemierzyć te ścieżki i użyć File, aby sprawdzić, czy plik istnieje.Java, sprawdź, czy plik wykonywalny istnieje w środowisku PATH

Czy jest jakiś szybszy sposób w Javie?

+1

Za to, co jest warte, nie mogę "Sądzę, że jest lepszy sposób niż proponujesz – Miquel

+0

@Nie jest to pytanie w SCALA? Pytam w JAVA, koleś – w00d

+0

@ w00d, czy zauważyłeś podobieństwa między odpowiedzią poniżej a odpowiedzią na to pytanie? Ten link jest również na ten sam temat http://stackoverflow.com/questions/2439984/how-to-check-if-a-program-is-installed-on-system. Poświęć trochę czasu i zbadaj się "koleś". – Nix

Odpowiedz

-1

Możesz użyć sekcji Runtime.getRuntime().exec("command"); w sekcji . Jeśli aplikacja nie będzie dostępna w wersji PATH, otrzymasz wyjątek.

[EDIT]

Ale .. to będzie wykonać aplikację zamiast czeku. Przepraszam.

+1

czy nie ma to wpływu strony na faktyczne wykonanie polecenia? –

3

Czy jest jakiś szybszy sposób w Javie?

Pod względem wydajności nie.

Pod względem wysiłku kodowania prawdopodobnie nie ma. Na pewno nie znam żadnej zewnętrznej biblioteki Javy, która przeszuka ścieżkę wyszukiwania poleceń, aby sprawdzić, czy istnieje plik wykonywalny.

Niestety, poszukiwanie pliku wykonywalnego w systemie Windows jest trochę trudne, ponieważ trzeba uwzględnić różne typy plików wykonywalnych ... na podstawie przyrostków plików. Nawet w systemie Linux/Unix musisz użyć nowych interfejsów API atrybutów pliku Java 7, aby określić, czy plik kandydata ma ustawione uprawnienia do wykonywania.

(Jestem świadomy, że niektóre polecenia mogą być uruchamiane w sposób nieszkodliwy, np. Mogą obsługiwać opcje/argumenty, które wyprowadzają ciąg wersji lub informacje pomocnicze, ale działa to tylko w określonych przypadkach. Mam także świadomość, że w systemie Unix/Linux istnieje wbudowana komenda powłoki o nazwie "whereis", która może powiedzieć, czy w ścieżce wyszukiwania znajduje się polecenie wykonywalne o podanej nazwie.)