2011-09-15 35 views
9

System.getenv(name) cần tên của biến môi trường.Cách liệt kê tất cả các biến môi trường trong Java

Tôi đang cố gắng gọi Runtime.exec(String[], String[], File), thông số phụ cần một mảng biến môi trường, tôi không chắc liệu subprocess sẽ kế thừa biến môi trường từ quá trình hiện tại nếu tôi đã chỉ định tham số này.

Ví dụ: nếu tôi vượt qua new String[]{"NEWDIR=/home"} làm thông số phụ và quy trình java hiện tại có môi trường OLDDIR=/var, giá trị trả lại của System.getenv("OLDDIR") trong quy trình con là gì?

cập nhật: Xin lỗi, tôi phải sử dụng Java 1.4 và có vẻ như System.getenv() đã được giới thiệu trong 1.5?

+0

Tại sao bạn phải sử dụng Java 1.4? Các phiên bản Java mới hơn có khả năng tương thích ngược tuyệt vời - bạn đã thử nâng cấp chưa? – Bringer128

Trả lời

11

System.getenv() sẽ trả về Map<String,String> với tất cả các biến môi trường.

Nhưng bạn có thể dễ dàng chuyển sang ProcessBuilder là API thuận tiện hơn để bắt đầu quy trình mới.

Với ProcessBuilder bạn chỉ có thể gọi environment() và có được một Map rằng chứa các biến môi trường hiện tại và mà bạn có thể thao tác cách bạn muốn: ví dụ, nếu bạn thêm một cái gì đó với nó, sau đó sẽ được thêm vào mới xử lý các biến môi trường. Nếu bạn xóa nội dung nào đó, nó sẽ hiển thị không trong quy trình mới.

+0

Cảm ơn bạn đã trả lời nhanh chóng, tôi nên làm gì trong JAVA14? – sevenever

+0

Sau đó, bạn đã hơi say, vì cả hai 'System.getenv()' và 'ProcessBuilder' chỉ được giới thiệu trong Java 5 và' Runtime.exec() 'không cho phép kết hợp các biến môi trường hiện tại chưa biết với được chỉ định. Nghiêm túc: loại bỏ phiên bản cũ đó. –

17
Map<String, String> env = System.getenv(); 
for (String envName : env.keySet()) { 
    System.out.format("%s=%s%n", envName, env.get(envName)); 
} 
1

Nếu bạn chạy vỏ ngoài, bạn có thể sử dụng nó để đặt biến môi trường. ví dụ.

bash -c ENV1=hi ENV2=bye echo $ENV1 $ENV2 

chỉ này hoạt động nếu bạn có một vỏ UNIX (hoặc Cygwin)

Bạn nên di chuyển ra khỏi Java 1.4 và Java 5.0. Thậm chí Java 6 bạn có thể xem xét nâng cấp lên Java 7.

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