java -- 文件 zip不解压直接读取文件

读取一个myzip.zip文件

读取一个myzip.zip文件 ,下面有mmm目录下有kk.txt文件、以及有bb.cpp文件

class Fileoperatefun{

	public void func1(){
		ZipInputStream mZipin = null;
		File mfie = new File("./file/myzip.zip");
		try {
			mZipin = new ZipInputStream(new FileInputStream(mfie));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		ZipEntry mZipen = null;
		ZipFile mZipFile = null;
		InputStreamReader mm = null;
		BufferedReader mm1 = null;
		try {
			mZipFile = new ZipFile("./file/myzip.zip");
			System.out.println("zip is available:" + mZipin.available());
			while((mZipen = mZipin.getNextEntry()) != null){
				if(!mZipen.isDirectory()){
					System.out.println("file:" + mZipen.getName() + " size:"+ mZipen.getSize());
					mm =new InputStreamReader(mZipFile.getInputStream(mZipen));
                    mm1 = new BufferedReader(mm);
					System.out.println("    read:" + mm1.readLine());
				}else{
					System.out.println( mZipen.getName() + "this is only directory ");
				}
			}
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
			try {
	            mm1.close();
	            mm.close();
	            mZipFile.close();
			} catch (IOException e) {
            	e.printStackTrace();
        	}
		}
	}
}


读取结果:
zipfile :bb.cpp
zip is available:1
file:bb.cpp size:18
    read:#include <nnb.h>
mmkt/this is only directory 
mmm/this is only directory 
file:mmm/kk.txt size:5
    read:kkkk

使用Enumeration

public void fun3(String zipUrl){
	ZipFile zipFile = null;
	try{
		zipFile = new ZipFile(zipUrl);
		Enumeration<?> enumeration = zipFile.entries();
		ZipEntry zipEntry = null;
		while (enumeration.hasMoreElements()){
			zipEntry = (ZipEntry) enumeration.nextElement();
			System.out.println("file:" + zipEntry.getName().toLowerCase());
		}
	}catch (IOException e) {
		e.printStackTrace();
	}
}

遇到带密码的zip增加判断

JDK自带的ZIP操作接口(java.util.zip包,请参看文章末尾的博客链接)并不支持密码,甚至也不支持中文文件名
读取了zip的文件的头,第7位可以判断是否加密了

class Fileoperatefun{

	public void func1(){
		ZipInputStream mZipin = null;
		File mfie = new File("./file/myzip.zip");
		try {
			mZipin = new ZipInputStream(new FileInputStream(mfie));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		ZipEntry mZipen = null;
		ZipFile mZipFile = null;
		InputStreamReader mm = null;
		BufferedReader mm1 = null;
		
		try {
			byte[] ziphead = new byte[12];
			BufferedInputStream m23 = new BufferedInputStream(new FileInputStream(mfie));
            m23.read(ziphead);
			for(int i = 0; i < ziphead.length; i++){
				System.out.print(" "+ziphead[i]);
			}
			System.out.println("");	
			/*
			if(ziphead[6] > 0){
				System.out.println(" this is encrpte");
				m23.close();
				return;
			}*/
			mZipFile = new ZipFile("./file/myzip.zip");
			System.out.println("zip is available:" + mZipin.available());
			while((mZipen = mZipin.getNextEntry()) != null){
				if(!mZipen.isDirectory()){
					System.out.println("file:" + mZipen.getName() + " size:"+ mZipen.getSize());
					mm =new InputStreamReader(mZipFile.getInputStream(mZipen));
                    mm1 = new BufferedReader(mm);
					System.out.println("    read:" + mm1.readLine());
				}else{
					System.out.println( mZipen.getName() + "this is only directory ");
				}
			}
		    mm1.close();
            mm.close();
            mZipFile.close();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
		}
	}
}

猜你喜欢

转载自blog.csdn.net/LHshooter/article/details/84940473