2009-11-18 106 views
0

我正在嘗試使用Java運行時類壓縮和存檔文件夾中的所有文件。我的代碼片段看起來就象這樣:使用Java運行時壓縮和存檔文件夾中的文件

public static void compressFileRuntime() throws IOException, InterruptedException { 

    String date = Util.getDateAsString("yyyy-MM-dd"); 
    Runtime rt = Runtime.getRuntime(); 
    String archivedFile = "myuserData"+date+".tar.bz2"; 
    String command = "tar --remove-files -cjvf "+archivedFile+" marketData*"; 
    File f = new File("/home/amit/Documents/"); 
    Process pr = rt.exec(command, null, f); 
    System.out.println("Exit value: "+pr.exitValue()); 
} 

上面的代碼不存檔和壓縮文件如預期,雖然它創建文件夾「/home/amit/Documents/」在文件myuserData2009-11-18.tar.bz2

另外的輸出是

Exit value: 2. 

雖然我是否來自命令行執行相同的命令,它給出了預期的結果。

請告訴我我失蹤了。

感謝
阿米特

回答

2

問題就出在這個部分:

" marketData*" 

你希望要壓縮的文件名必須從*通配符晶片被保護。 Globbing由外殼完成,而不是由工具本身完成。你的選擇是要麼:

  • 算出來的文件進行歸檔自己
  • 啓動shell執行的命令(「/ bin/sh的-c」)包含文件的文件夾
  • 開始焦油要存檔

編輯: 對於外殼選項,命令如下所示:

String command = "sh -c \"tar --remove-files -cjvf "+archivedFile+" marketData*\""; 

(介意\" s表示劃定的命令由shell執行,不要用單引號加時賽外殼不會解釋水珠。)

+0

感謝rsp。 但該文件夾包含許多其他類型的文件,我只需要存檔以marketData開頭的文件。此外,文件通過FTP轉儲到該文件夾​​中,文件數量也不相同。所以使用你指定的第一種或第三種方法似乎很難。 我會嘗試第二個。你能否詳細說明一下。 謝謝, – Amit 2009-11-18 11:16:42

+0

它的工作 謝謝 – Amit 2009-11-18 12:10:32

1

(不是你的問題的答案,更多的是建議的),爲什麼不試試this代替。

+0

由於兩個主要原因,我沒有嘗試上述: 1.壓縮在bz2格式更好。我需要每天壓縮文件一次。 2.我需要一次性刪除已存檔的文件。 – Amit 2009-11-18 11:05:13

1

如果真的是你想創建一個bzip2的存檔,我會使用Java實現而不是本地命令,這對於可移植性很有好處,例如http://www.kohsuke.org/bzip2/(儘管它並未真正優化,壓縮似乎比使用Java LZMA更慢)。