2017-02-27 6 views
0

キャプションの状態として、ヌルで終了する複数のファイル名で環境変数を設定しようとしています。ProcessBuilder経由で環境変数にヌル終了文字列を設定する

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

おそらく、nullを追加する必要はありません。実行中のコマンドに到達すると、それらはヌル終了文字列に変換されます。 – rghome

+0

私が達成しようとしているのは、次のような値です。filename1 \ 0filename2 \ 0filename2 \ 0 ... filenameN \ 0 –

+0

これは、O/Sがnullを最後と解釈する可能性があるため、文字列の帯域外セパレータを使用する場合は、別の制御文字を使用します。 – rghome

答えて

0

特に文字列をオペレーティングシステムに渡すときに、文字列の区切り文字としてnullを使用しないでください。

O/Sは、文字列の終わりのマーカーとしてnullを解釈し、それ以降は何もコピーしません。

代わりに別の制御文字を使用してください(「\ r」など)。

+0

私は現在スペースを使用しています。 ench変数の文字列は次のようになります: "file1" "file2" "file 3" NEW_ARRAY =($ variable) 私は簡単に使うことができます配列として。 Javaコードでは、「\」でエスケープする必要があります。 –

関連する問題