1. 程式人生 > >Java讀取壓縮檔案資訊

Java讀取壓縮檔案資訊

不解壓壓縮檔案,獲取其中包含的檔案,通過檔名檢查是否包含非法檔案。(後續再根據檔案頭或內容吧)

import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.zip.*;

public class DoCheck {

    private final static String[] illegalString = { "README", "LOG", "PFX", "TXT", "DOC", "DOCX", "XLS", "XLSX", "PPT",
            
"PPTX", "ZIP", "GZ", "RAR", "TAR", "7Z", "PDF" }; public static void main(String[] args) { if (args.length <= 0) { System.out.println("請指定要檢查的壓縮檔案。The file name must be given."); return; } String fileName = args[0]; if (commonCheck(fileName)) {
return; } readFile(fileName); } private static void readFile(String fileName) { try { ZipFile zf = new ZipFile(fileName); HashSet<ZipEntry> set = new HashSet(); int fileCount = 0; int dirCount = 0; for (Enumeration<ZipEntry> entries = (Enumeration<ZipEntry>) zf.entries(); entries.hasMoreElements();) { ZipEntry ze
= entries.nextElement(); if (ze.isDirectory()) { dirCount++; } else { fileCount++; String name = ze.getName(); for (String s : illegalString) { if (name.toUpperCase().contains(s)) { set.add(ze); break; } } } } System.out.println("共掃描" + fileCount + "個檔案," + dirCount + "個目錄。The package contains " + fileCount + " files and " + dirCount + " directories.\n"); if (set.size() <= 0) { System.out.println("PASS: 未發現可疑檔案。ILLEGAL FILE NOT FOUND."); } else { System.out.println("可能非法的檔案如下。illegal files: \n"); int index = 1; System.out.format(" %-10s%-80s%-20s %n%n", "NO.", "FileName", "Bytes"); for (ZipEntry e : set) { System.out.format(" %-10s%-80s%-20s %n%n", index, e.getName(),e.getSize()); index++; } } zf.close(); } catch (ZipException e) { System.out.println("WARNING: 不受支援的壓縮格式。The file format is invalid."); } catch (IOException e) { System.out.println("WARNING: IO 異常。IOException occured."); } catch (SecurityException e) { System.out.println("WARNING: 沒有訪問許可權。The file is not accessible."); } catch (NullPointerException e) { System.out.println("WARNING: NullPointerException.可能是由於ZipEntry沒有建立時間導致。"); } } private static boolean commonCheck(String fileName) { File f = new File(fileName); if (!f.exists()) { System.out.println("INFO: 檔案'" + fileName + "'不存在。The file is not exist."); return true; } if (!f.canRead()) { System.out.println("INFO: 檔案'" + fileName + "'不可讀。The file can't be read."); return true; } if(f.isDirectory()) { System.out.println("INFO: '" + fileName + "'是路徑。The package must be a TAR or WAR."); return true; } return false; } }