1. 程式人生 > >JSF Primefaces元件 實現多檔案打包下載

JSF Primefaces元件 實現多檔案打包下載

一、前臺元件 <p:commandButton value=“下載” ajax=“false” actionListener="#{shrbeianxxAction.download()}" onclick=“PrimeFaces.monitorDownload(start, stop);” icon=“ui-icon-arrowthick-1-s”> <p:fileDownload value="#{shrbeianxxAction.zipFile}" </p:commandButton>

二、繫結action中設定zipFile屬性 和 download()方法,點選按鈕首先執行download方法給zipFile賦值,然後執行下載 注意不要忘記set get方法

download方法 這是呼叫的方法 public static void zipFiles(List srcFiles, File zipFile) { // 判斷壓縮後的檔案存在不,不存在則建立 if (!zipFile.exists()) { try { zipFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } // 建立 FileOutputStream 物件 FileOutputStream fileOutputStream = null; // 建立 ZipOutputStream ZipOutputStream zipOutputStream = null; // 建立 FileInputStream 物件 FileInputStream fileInputStream = null;

    try {
        // 例項化 FileOutputStream 物件
        fileOutputStream = new FileOutputStream(zipFile);
        // 例項化 ZipOutputStream 物件
        zipOutputStream = new ZipOutputStream(fileOutputStream);
        // 建立 ZipEntry 物件
        ZipEntry zipEntry = null;
        // 遍歷原始檔陣列
        for (File file : srcFiles) {
            // 將原始檔中的當前檔案讀入 FileInputStream 流中
            fileInputStream = new FileInputStream(file);
            // 例項化 ZipEntry 物件,原始檔陣列中的當前檔案
            zipEntry = new ZipEntry(file.getName());
            zipOutputStream.putNextEntry(zipEntry);
            // 該變數記錄每次真正讀的位元組個數
            int len;
            // 定義每次讀取的位元組陣列
            byte[] buffer = new byte[1024];
            while ((len = fileInputStream.read(buffer)) > 0) {
                zipOutputStream.write(buffer, 0, len);
            }
        }
        zipOutputStream.closeEntry();
        zipOutputStream.close();
        fileInputStream.close();
        fileOutputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}