您好,登錄后才能下訂單哦!
怎么在java中壓縮文件?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
Java是一門面向對象編程語言,可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序。
1、ZIP文件格式
[local file header + file data + data descriptor]{1,n} + central directory + end of central directory record 即 [文件頭+文件數據+數據描述符]{此處可重復n次}+核心目錄+目錄結束標識 當壓縮包中有多個文件時,就會有多個[文件頭+文件數據+數據描述符]
2、壓縮和下載步驟
(1)創建壓縮包前準備
//定義壓縮包存在服務器的路徑 String path = request.getSession().getServletContext().getRealPath("/WEB-INF/fileTemp"); //創建路徑 File FilePath = new File(path + "/file"); if (!FilePath.exists()) { FilePath.mkdir(); } String path = FilePath.getPath() + "/"; //定義導出壓縮包的名稱 String title ="問價壓縮包"; //壓縮包格式 String fileNamezip = title + ".zip"; String zipPath = path + fileNamezip; //創建一個ZIP輸出流并實例化緩沖區域 ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipPath))); //設置編碼格式(解決linux出現亂碼) out.setEncoding("gbk"); //定義字節數組 byte data[] = new byte[2048]; //獲取文件記錄(獲取文件記錄代碼省略) List FileList =。。。; if (!FileList.isEmpty()) { ExportUtil util = new ExportUtil(title,title, request, response, FilePath.getPath()); }
(2)刪除壓縮包之前的數據,創建壓縮包
util.startZip(FilePath.getPath());
(3)循環將需要壓縮的文件放到壓縮包中
for (int i = 0; i < FileList.size(); i++) { fileVo fileVo=FileList.get(i); export(fileVo,request,response,title,FilePath.getPath(),fileName); } ------ public void export(fileVo fileVo, HttpServletRequest request, HttpServletResponse response, String title,String path, String fileName) { FileOutputStream fileOutputStream = null; try { File dirFile = null; int i = fileVo.getName().lastIndexOf("."); if(i!=-1){//存在文件類型 fileName1 = fileName1 + "." + (fileVo.getName()).substring(i+1); } boolean bFile = false; String mkdirName = path + File.separatorChar + title; dirFile = new File(mkdirName); if(!dirFile.exists()) { dirFile.getParentFile().mkdirs(); } if (dirFile.isDirectory()) { path = mkdirName + File.separatorChar + fileName1; } else { bFile = dirFile.mkdirs(); } if (bFile) { path = mkdirName + File.separatorChar + fileName1; } fileOutputStream = new FileOutputStream(path.replace("*", "")); String fileName = URLEncoder.encode(fileName1, "UTF-8"); if (fileName.length() > 110) { fileName = new String(fileName1.getBytes("gb2312"), "ISO8859-1"); } response.setHeader("Connection", "close"); response.setHeader("Content-Type", "application/octet-stream"); response.setContentType("application/x-msdownload"); response.setHeader("Content-Disposition", "attachment; filename=\"" + Utf8Util.toUtf8String(fileName) + "\""); //讀取文件流輸出到到另一個位置 fileVo.getFileIo(fileOutputStream); fileOutputStream.close(); } catch (Exception e) { logger.error("異常:原因如下"+e.getMessage(), e); } finally { try { if (fileOutputStream != null) { fileOutputStream.close(); } } catch (IOException e1) { // TODO Auto-generated catch block logger.error("異常:原因如下"+e1.getMessage(), e1); } } } ------
(4)壓縮完成,關閉輸出流。
util.entdZip(FilePath.getPath());
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。