2013-03-20 43 views
10

Tôi có thể in đường dẫn bằng cách sử dụng System.getenv("PATH"). Sau đó, tôi có thể đi qua các đường dẫn đó và sử dụng File để kiểm tra xem tệp có tồn tại hay không.Java, kiểm tra xem tệp thực thi có tồn tại trong môi trường PATH không

Có cách nào nhanh hơn trong Java không?

+1

Vì nó đáng giá, tôi không 't nghĩ rằng có một cách tốt hơn so với những gì bạn đề xuất – Miquel

+0

@Nix là câu hỏi đó trong SCALA? Tôi hỏi trong JAVA dude – w00d

+0

@ w00d bạn có thấy bất kỳ điểm tương đồng nào giữa câu trả lời bên dưới và câu trả lời cho câu hỏi đó không? Liên kết này cũng có cùng chủ đề http://stackoverflow.com/questions/2439984/how-to-check-if-a-program-is-installed-on-system. Hãy dành thời gian và tự nghiên cứu 'dude.' – Nix

Trả lời

-1

Bạn có thể sử dụng Runtime.getRuntime().exec("command"); trong mục try ... catch. Nếu ứng dụng sẽ không ở trong PATH, bạn sẽ nhận được ngoại lệ.

[EDIT]

Nhưng .. này sẽ thực hiện ứng dụng thay vì kiểm tra. Lấy làm tiếc.

+1

sẽ không này có tác dụng phụ của thực sự thực hiện lệnh? –

2

Cách tiếp cận của bạn sẽ hoạt động.

Tôi đề xuất sử dụng phương pháp File.listFiles(FileFilter filter) trên mỗi thư mục trong đường dẫn. Điều này sẽ làm cho việc tìm kiếm mỗi thư mục đơn giản hơn.

3

Có cách nào nhanh hơn trong Java không?

Xét về hiệu suất, không.

Về mặt nỗ lực mã hóa, có thể là không. Chắc chắn tôi không biết về bất kỳ thư viện Java bên thứ ba nào sẽ tìm kiếm đường dẫn tìm kiếm lệnh để xem liệu một tệp thực thi có tồn tại hay không.

Thật không may khi tìm kiếm tệp thực thi trên Windows hơi phức tạp vì bạn phải tính đến nhiều loại tệp thực thi khác nhau ... dựa trên hậu tố tệp. Ngay cả trên Linux/Unix, bạn cần sử dụng các API thuộc tính tệp Java 7 mới để xác định xem một tệp ứng viên có tập quyền thực thi hay không.

(Tôi biết rằng một số lệnh có thể chạy theo cách vô hại; ví dụ: chúng có thể hỗ trợ tùy chọn/đối số xuất ra chuỗi phiên bản hoặc thông tin trợ giúp. Tuy nhiên, chỉ hoạt động trong các trường hợp cụ thể. m cũng biết rằng trên Unix/Linux, có một lệnh trình bao được gọi là "whereis" có thể cho bạn biết nếu một lệnh thực thi có tên đã tồn tại trên đường dẫn tìm kiếm.)

Các vấn đề liên quan