2017-02-27 6 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

아마도 null을 추가 할 필요가 없습니다. 실행중인 명령에 도달하면 null로 끝나는 문자열로 변환됩니다. – rghome

+0

예. 달성하고자하는 것은 varibale 값은 다음과 같습니다 : filename1 \ 0filename2 \ 0filename2 \ 0 ... filenameN \ 0 –

+0

O/S가 null로 해석 할 수 있으므로 실제로는 좋은 생각이 아닙니다. 문자열의. 대역 외 분리자를 원하면 다른 제어 문자를 사용하십시오. – rghome

답변

0

특히 문자열을 운영 체제로 전달할 때 문자열에서 구분 기호로 null을 사용하지 않아야합니다.

O/S는 end-of-string 표식으로 null을 해석하고 이후에 아무 것도 복사하지 않을 수 있습니다.

대신 다른 제어 문자를 사용하십시오 (예 : '\ r').

+0

공백을 사용합니다. env 변수에 결과 문자열이 다음과 같이 보입니다 : "file1" "file2" "file 3" NEW_ARRAY = ($ variable) 그래서 쉽게 사용할 수 있습니다. 그것을 배열로. Java 코드에서 "\로 이스케이프 처리해야 함"을 명심하십시오! –