2011-06-05 69 views
1

我想將元數據附加到Unix文件系統中的文件。 attr命令讓我這樣做,但 命令語法要求附加變量的路徑爲雙重qoutes。從Java程序使用attr linux命令

attr -s outpipe0 "/mnt/FUse/FileB" FileA 

如何使用System.Runtime.exec在Java中運行上面的命令。當我嘗試使用字符串數組參數運行時,我必須給出上述「/ mnt/FUse/FileB」,它在java程序中導致問題,因爲它將雙引號視爲java中字符串的結尾。我基本上想發送一個字符串參數,它本身有雙引號。

有人可以提出解決辦法。

感謝

+1

微不足道的解決方法:編寫一個Un * x外殼腳本,負責正確調用* attr *命令並從Java調用該腳本(而不是直接調用* attr *)。我還強烈建議將任何shell腳本輸出重定向到*/dev/null *或臨時文件,而不是嘗試解析Java中的所有輸出。我還建議從外部shell進程中分叉,然後* kill -9 *由Java創建的shell進程。不要讓Java **有任何**機會來與您的shell進程「發揮智能」。哦,總是從派生的Java線程中調用外部進程。 – SyntaxT3rr0r 2011-06-05 22:31:24

+1

也從來沒有*使用任何其他的* Runtime.exec *方法調用採取* String [] *。永遠不要希望使用常規的String方法調用,並讓Java正確地分割你的字符串。在執行外部過程之前自行分解您的論點。 – SyntaxT3rr0r 2011-06-05 22:35:56

回答

2

您可以在Java中的文本字符串內逃脫引號,像這樣:

"\"/mnt/FUse/FileB\"" 

,將解決你的如何將字符串中的雙引號的問題,但我對此表示懷疑將解決你的程序。這是因爲我懷疑attr程序實際上需要(或接受)雙引號。相反,殼吃它們。例如,如果您在shell中鍵入的命令是您提到的那個命令,那麼在將參數傳遞到attr之前,雙引號將被shell使用。所以我懷疑你是否需要雙引號(但是如果你這樣做,請參見上文)。