在嘗試使用zip壓縮存檔時,java.util.zip我遇到了很多問題,而這些問題大部分都是我解決的。現在,我終于獲得了一些輸出,我在努力獲得“正確的”輸出。我有一個提取的ODT文件(目錄將更適合描述),對此我做了一些修改?,F在,我想壓縮該目錄以重新創建ODT文件結構。將目錄壓縮并重命名以.odt結尾可以正常工作,因此應該沒有問題。主要問題是我丟失了目錄的內部結構。一切都變得“平坦”,我似乎沒有找到保留原始多層結構的方法。我希望對此有所幫助,因為我似乎找不到問題。以下是相關的代碼段:ZipOutputStream out = new ZipOutputStream(new FileOutputStream( FILEPATH.substring(0, FILEPATH.lastIndexOf(SEPARATOR) + 1).concat("test.zip"))); compressDirectory(TEMPARCH, out);該SEPARATOR是系統文件分隔符和FILEPATH是原來的ODT,我將覆蓋,但還沒有在這里完成的用于測試目的的文件路徑。我只是寫到同一目錄中的test.zip文件。private void compressDirectory(String directory, ZipOutputStream out) throws IOException{ File fileToCompress = new File(directory); // list contents. String[] contents = fileToCompress.list(); // iterate through directory and compress files. for(int i = 0; i < contents.length; i++) { File f = new File(directory, contents[i]); // testing type. directories and files have to be treated separately. if(f.isDirectory()) { // add empty directory out.putNextEntry(new ZipEntry(f.getName() + SEPARATOR)); // initiate recursive call compressDirectory(f.getPath(), out); // continue the iteration continue; }else{ // prepare stream to read file. FileInputStream in = new FileInputStream(f); // create ZipEntry and add to outputting stream. out.putNextEntry(new ZipEntry(f.getName())); // write the data. int len; while((len = in.read(data)) > 0) { out.write(data, 0, len); } out.flush(); out.closeEntry(); in.close(); } } }包含要壓縮文件的目錄位于用戶空間中的某個位置,而不與結果文件位于同一目錄中。我認為這可能很麻煩,但我真的看不出來。我也發現問題可能出在使用相同的流進行輸出,但是我再也看不到如何。我在一些示例和教程中看到了它們使用的getPath()替代方法,getName()但進行更改后得到的壓縮文件為空。
添加回答
舉報
0/150
提交
取消