2012-03-27 65 views
1

必須在我的java程序中使用pkzip來壓縮(因爲標準的java zip例程在大型機上不起作用),我認爲它正確壓縮,但它需要很長時間完成。下面是mycode的Java進程調用pkzip花費很長時間來壓縮

Runtime myruntime = Runtime.getRuntime(); 
Process newproc = myruntime.exec("c:\\app\\pkzipc.exe -add c:\\output\\test.zip c:\\doc\\foo.pdf c:\\doc\\bar.doc""); 

foo.pdfbar.doc約爲20MB每個,如果我經由命令行執行這一點,那麼它需要大約一秒鐘來壓縮,但是當我使用java,它需要30分鐘至1小時,以完成拉鍊。任何想法爲什麼?

回答

2

您需要確保您正在讀取子進程的標準輸出和錯誤流。如果pkzip生成輸出,那麼它將被操作系統緩衝,並且如果緩衝區填滿,那麼您可以期望子進程阻塞,直到緩衝區被清除。

Process對象具有獲取輸入,輸出和錯誤流的方法。創建從輸出和錯誤流中讀取的新線程,並將它們傳送到System.outSystem.err,或者如果您不關心它,就放棄輸出。

+0

謝謝,你認爲你可以給我一個示例代碼,卡梅隆?我真的不在乎輸出,我想放棄輸出,請幫助。 – 2012-03-27 03:28:37

+0

我似乎無法找到'pkzipc.exe'選項。沒有一個選項可以使用最少的輸出或完全不輸出? – madth3 2012-03-27 03:31:47

+0

@madth:當我回家後會發佈我的解決方案。 – 2012-03-27 14:28:03

1

嘗試使用Java的java.util.zip API來處理.zip文件,看看tutorial

+1

嗨,我現在必須使用pkzip。 java.util.zip生成大型機上不可讀的zip文件。 – 2012-03-27 03:25:04