明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

Java咖啡館——一個壓縮歸檔實(shí)用軟件(4)

[摘要]6.ZIP壓縮和CRC校驗(yàn)  良好的開端是成功的一半,有了上面的準(zhǔn)備,完成主程序也就很容易了。public static void main(String[] args) { // 程序出現(xiàn)任何異常都將打印使用信息。 try { // 記錄正則表達(dá)式和路徑名稱。 Str...

    

  6.ZIP壓縮和CRC校驗(yàn)

  良好的開端是成功的一半,有了上面的準(zhǔn)備,完成主程序也就很容易了。

public static void main(String[] args) {
   // 程序出現(xiàn)任何異常都將打印使用信息。
   try {
      // 記錄正則表達(dá)式和路徑名稱。
      String regex = args[1];
      String targetFolder = args[0];

      File path = new File(targetFolder);
      ArrayList files = new ArrayList();

      // 遞歸搜索path所指定的文件夾內(nèi)以及子文件夾內(nèi)滿足合正則表達(dá)式。
      recursiveAppend(path, files, regex);

     if (files.size() == 0) {
     System.out.println("找不到任何匹配的文件!");
        return;
     }

     // 把符合正則表達(dá)式的文件壓縮成ZIP格式并且返回CRC校驗(yàn)值。
     FileOutputStream file = new FileOutputStream("Backup.zip");
     CheckedOutputStream csum = new CheckedOutputStream(file, new CRC32());
     ZipOutputStream zos = new ZipOutputStream(csum);
     BufferedOutputStream out = new BufferedOutputStream(zos);

     // 為ZIP包添加注釋。
     zos.setComment("Backup " + regex + " in " + targetFolder);

     // 開始壓縮。
     for (int i = 0; i < files.size(); i++) {
       String currentFile = (String) files.get(i);
       System.out.println("Writing file " + currentFile);
       BufferedReader in = new BufferedReader(new FileReader(currentFile));
       zos.putNextEntry(new ZipEntry(currentFile));
       int c;
       while ((c = in.read()) != -1)
          out.write(c);
       in.close();
       }
       out.close();

       // 當(dāng)壓縮包關(guān)閉以后便可以得到CRC校驗(yàn)值。
       System.out.println("CRC校驗(yàn)值:" + csum.getChecksum().getValue());
     } catch (Exception e) {
       printUsage();
     }
}

  首先可以看到,整個main函數(shù)部分是用一個大的try...catch異常捕獲語句容納起來的,當(dāng)程序出現(xiàn)任何異常時,我們都認(rèn)為是用戶的參數(shù)不正確,便調(diào)用printUsage()方法打印使用信息,具體代碼從略。

  首先通過recursiveAppend()方法遞歸搜索指定的文件夾內(nèi)以及子文件夾內(nèi)滿足合正則表達(dá)式的文件名,結(jié)果將保存在files中。如果有滿足條件的文件,則把這些文件壓縮成ZIP格式,并添加適當(dāng)?shù)淖⑨。?dāng)壓縮包關(guān)閉以后便可以得到ZIP包的CRC校驗(yàn)值。

  注意,以上這些代碼使用的都是Java API內(nèi)置的功能,如果你在編寫的過程中遇到找不到類定義的情況,別忘記使用Eclipse內(nèi)置的Ctrl+Shift+M自動導(dǎo)入功能。
至此,整個軟件全部編寫好了。你可以在命令行手動輸入把玩一下,或者點(diǎn)擊Run菜單的Run...菜單項(xiàng),配置Eclipse運(yùn)行的參數(shù)如圖2所示。

Java咖啡館——一個壓縮歸檔實(shí)用軟件(4)