Java無需解壓直接讀取Zip文件和文件內容

1. 解析zip文件讀取文件流:java

package test;

import java.io.BufferedInputStream;  
import java.io.BufferedReader;  
import java.io.FileInputStream;  
import java.io.InputStream;  
import java.io.InputStreamReader;  
import java.util.zip.ZipEntry;  
import java.util.zip.ZipFile;  
import java.util.zip.ZipInputStream;  


public class aaaa {

    public static void main(String[] args) throws Exception {
        try {  
               readZipFile("D:\\ztree.zip");  
           } catch (Exception e) {  
               // TODO Auto-generated catch block  
               e.printStackTrace();  
           }  
    }
    
    public static void readZipFile(String file) throws Exception {  
           ZipFile zf = new ZipFile(file);  
           InputStream in = new BufferedInputStream(new FileInputStream(file));  
           ZipInputStream zin = new ZipInputStream(in);  
           ZipEntry ze;  
           while ((ze = zin.getNextEntry()) != null) {  
               if (ze.isDirectory()) {
               } else {  
                   System.err.println("file - " + ze.getName() + " : "  
                           + ze.getSize() + " bytes");  
                   long size = ze.getSize();  
                   if (size > 0) {  
                       BufferedReader br = new BufferedReader(  
                               new InputStreamReader(zf.getInputStream(ze)));  
                       String line;  
                       while ((line = br.readLine()) != null) {  
                           System.out.println(line);  
                       }  
                       br.close();  
                   }  
                   System.out.println();  
               }  
           }  
           zin.closeEntry();  
       }  
}

二、讀取文件,壓縮zip並下載;web

//java自帶的類庫,實現zip壓縮打包文件下載, 不支持中文文件名
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Date;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class test {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("APPLICATION/OCTET-STREAM");
        response.setHeader("Content-Disposition", "attachment; filename=" + this.getZipFilename());
        System.out.println("in BatchDownload................");
        ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
        File[] files = new File[2];
        files[0] = new File("D:/OptiCM-POC/KDKK3Project/KDKK/images/1.jpg");
        files[1] = new File("D:/OptiCM-POC/KDKK3Project/KDKK/images/2.jpg");
        zipFile(files, "", zos);
        zos.flush();
        zos.close();
    }

    private void zipFile(File[] subs, String baseName, ZipOutputStream zos) throws IOException {
        for (int i = 0; i < subs.length; i++) {
            File f = subs[i];
            zos.putNextEntry(new ZipEntry(baseName + f.getName()));
            FileInputStream fis = new FileInputStream(f);
            byte[] buffer = new byte[1024];
            int r = 0;
            while ((r = fis.read(buffer)) != -1) {
                zos.write(buffer, 0, r);
            }
            fis.close();
        }
    }

    private String getZipFilename() {
        Date date = new Date();
        String s = date.getTime() + ".zip";
        return s;
    }
}

 

三、java操做文件(壓縮文件,導出zip,刪除zip,寫入文件,讀取文件)apache

//壓縮文件(防止中文亂碼----使用apache的ZipOutputStream包)
    private static void writeZip(String[] strs,String zipname,String temppath) throws IOException {
        String[] files = strs;
        OutputStream os = new BufferedOutputStream(new FileOutputStream(temppath+"//"+zipname));
        ZipOutputStream zos = new ZipOutputStream(os);
        byte[] buf = new byte[8192];
        int len;
        for (int i=0;i 0 ) {
                zos.write( buf, 0, len );
            }
            zos.closeEntry();
            bis.close();
        }
         zos.setEncoding("GBK");
         for(int i=0;i 0 ) //切忌這後面不能加 分號 」;「  
                 {  
                     os.write(buf, 0, len);//向客戶端輸出,實際是把數據存放在response中,而後web服務器再去response中讀取  
                  }
                in.close();
                os.close();
                deleteZip(temppath);//導出後刪除zip

 /**
     * 追加文件:使用FileWriter---寫入
     */
    public static void appendMethodB(String fileName, StringBuffer content) {
        try {
            //打開一個寫文件器,構造函數中的第二個參數true表示以追加形式寫文件
            FileWriter writer = new FileWriter(fileName, true);
            /*OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(fileName, true),"UTF-8");
            osw.write(content);
            osw.close();*/
            
            writer.write(content.toString());
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 /**
     * 功能:Java讀取txt文件的內容
     * 步驟:1:先得到文件句柄
     * 2:得到文件句柄當作是輸入一個字節碼流,須要對這個輸入流進行讀取
     * 3:讀取到輸入流後,須要讀取生成字節流
     * 4:一行一行的輸出。readline()。
     * 備註:須要考慮的是異常狀況
     * @param filePath
     */
    public static ArrayList readTxtFile(String filePath){
         ArrayList readList = new ArrayList();  
        try {
                String encoding="GBK";
                File file=new File(filePath);
                if(file.isFile() && file.exists()){ //判斷文件是否存在
                    InputStreamReader read = new InputStreamReader(
                    new FileInputStream(file),encoding);//考慮到編碼格式
                    BufferedReader bufferedReader = new BufferedReader(read);
                   
                    String lineTxt = null;
                    while((lineTxt = bufferedReader.readLine()) != null){
                        readList.add(lineTxt);                         
                    }                  
                    read.close();
        }else{
            System.out.println("找不到指定的文件");
        }
        } catch (Exception e) {
            System.out.println("讀取文件內容出錯");
            e.printStackTrace();
        }
        return readList;
    }
相關文章
相關標籤/搜索