2017-02-27 54 views
0

由於標題說明了我試圖用多個以null結尾的文件名設置一個環境變量。通過ProcessBuilder在環境變量中設置以null結尾的字符串

我的代碼如下所示:

ProcessBuilder pb = new ProcessBuilder(execCmd); 
Map<String, String> env = pb.environment(); 
env.clear(); 
String storedFiles = ""; 
Iterator<Attributes> storedSequence = info.getSequence().iterator(); 
while (storedSequence.hasNext()) { 
    storedFiles += storedSOPSequence.next().getFilename() + "\0"; 
} 
env.put("StoredFiles", storedFiles); 

try { 
    pb.start(); 
} catch (Exception e) { 

} 

但我碰到下面excepion:

Exception in thread "pool-1-thread-2" java.lang.IllegalArgumentException: 
Invalid environment variable value: "/tmp/tmp.DXrJMdJmbW/53cd50f9" 

有沒有辦法來實現這一目標?

+0

您可能不需要添加空值。當它們到達您正在運行的命令時,它們將被轉換爲空字符串。 – rghome

+0

好嗎?我試圖實現的是一個varibale,它的值如下所示:filename1 \ 0filename2 \ 0filename2 \ 0 ... filenameN \ 0 –

+0

這不是一個好主意,因爲O/S可能會將null視爲結尾的字符串。如果您想要帶外分隔符,請使用不同的控制字符。 – rghome

回答

0

不應將空值用作字符串中的分隔符,尤其是在將字符串傳遞到操作系統時。

O/S將null解釋爲字符串結束標記,並且在此之後可能不會複製任何內容。

改用另一個控制字符(例如'\ r')。

+0

我現在使用空格。在env變量中生成的字符串現在看起來像這樣: 「file1」「file2」「file 3」 因此,我可以將它包裝在我所謂的bash腳本中,如下所示: NEW_ARRAY =($ variable) 因此,我可以輕鬆使用它作爲數組。 請記住,Java代碼中的任何「應該轉義爲」! –