7Zip не завершает работу после обработки большого сжатия zip-файла
Я пишу программу java на платформе windows. Мне нужно сжать некоторые файлы в zip-архив. Я с помощью ProcessBuilder, чтобы начать новый процесс в 7-Zip:
ProcessBuilder processBuilder = new ProcessBuilder("7Z","a",zipPath,filePath);
Process p = processBuilder.start();
p.waitFor();
Проблема в том, что процесс 7zip никогда не завершается после завершения. Он создает необходимый zip-файл, но после этого просто зависает там. Это означает, что вызов waitFor()
никогда не возвращается, и моя программа застревает. Пожалуйста, предложите исправление или обходной путь.
1 ответ:
Вот что я в конечном итоге делает.
Я не могу установить переменные среды, поэтому мне пришлось установить путь c: для 7zip.
public void zipMultipleFiles (List<file> Files, String destinationFile){ String zipApplication = "\"C:\\Program Files\7Zip\7zip.exe\" a -t7z"; String CommandToZip = zipApplication + " "; for (File file : files){ CommandToZip = CommandToZip + "\"" + file.getAbsolutePath() + "\" "; } CommandToZip = CommandToZip + " -mmt -mx5 -aoa"; runCommand(CommandToZip); } public void runCommand(String commandToRun) throws RuntimeException{ Process p = null; try{ p = Runtime.getRuntime().exec(commandToRun); String response = convertStreamToStr(p.getInputStream()); p.waitFor(); } catch(Exception e){ throw new RuntimeException("Illegal Command ZippingFile"); } finally { if(p = null){ throw new RuntimeException("Illegal Command Zipping File"); } if (p.exitValue() != 0){ throw new Runtime("Failed to Zip File - unknown error"); } } }
Здесь можно найти функцию convert to string, которую я использовал в качестве ссылки. http://singztechmusings.wordpress.com/2011/06/21/getting-started-with-javas-processbuilder-a-sample-utility-class-to-interact-with-linux-from-java-program/