Java-процесс - невозможно распаковать zip-файл

Я пытаюсь распаковать какой-нибудь почтовый файл, он имеет около 65 мегабайт. Фрагменты кода ниже:

Этот метод на самом деле распаковывает файл:

public synchronized void execute(Path zipFile) {
    final ProcessBuilder builder = new ProcessBuilder("/bin/unzip",zipFile.toAbsolutePath().toString(), "-d", dir.toAbsolutePath().toString());
    FutureTask task = new FutureTask(new Callable() {
        @Override public Integer call() {
            try {
                System.out.println("started and waiting");
                int status = builder.start().waitFor();
                System.out.println("status: " + status);
                return status;
            } catch (InterruptedException e) {
            } catch (IOException e) {
            }
            return 0;
        }
    });

    List tasks = new ArrayList();
    tasks.add(task);
    System.out.println("task added");
    ExecutorService executor = Executors.newCachedThreadPool();
    for (FutureTask t : tasks) {
        executor.submit(t);
        System.out.println("submitted");
    }
    executor.shutdown();
    System.out.println("shutdown");
}

Этот исполнитель / будущие вещи есть только для того, чтобы убедиться, что я делаю это правильно. Этот метод вызывается из класса Finder, который находит zip-файл в каталоге и пытается его разархивировать. Он основан на этом кодеhttp://docs.oracle.com/javase/tutorial/essential/io/walk.html

Итак, чтобы быть конкретным:

@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
    if (find(file)) {
        synchronized(Finder.class) {
            executor.execute(file);
        }
    }
    return CONTINUE;
}

Теперь проблема. Это действительно смешно. Всякий раз, когда я извлекаю что-то с помощью этого кода, zip-файл на самом деле распаковывается, но ТОЛЬКО одни каталоги разархивированы, а другие нет. Например, у меня есть zip-файл с каталогами temp foo и bar, но после распаковки есть только, например, каталоги temp и foo, а bar не извлекается.

Выход из этого:

task added
submitted
started and waiting
shutdown

Почему нетстатус = что-то выход?

Я могу'не понимаю, почему это так. Когда я распаковываю его вручную, он распаковывается должным образом.

// РЕДАКТИРОВАТЬ

это сделал трюк

@Override
public synchronized void execute(String file, String dest) {
    ProcessBuilder pb = new ProcessBuilder("/bin/unzip","-qq", file, "-d", dest);
    pb.redirectErrorStream(true);

    try {
        Process p = pb.start();
        InputStream is = p.getInputStream();
        InputStreamReader r = new InputStreamReader(is);
        BufferedReader in = new BufferedReader(r);
        String line;
        while ((line = in.readLine()) != null) {
            // because of the -qq option, it does actually write out nothing
            System.out.println(line);
        }
    } catch (IOException ex) {
        System.err.println(ex.getMessage());
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос