解压-java读取zip压缩文件里面二级文件夹目录内的文件的问题

问题描述

java读取zip压缩文件里面二级文件夹目录内的文件的问题

我想在不解压的条件下得到一个压缩文件夹内部的二级目录下的文件流,但是搜了好久也没找到
代码如下

import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.security.GeneralSecurityException;
import java.security.cert.X509Certificate;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

import sun.security.pkcs.PKCS7;

public class X509Util {
public static X509Certificate readSignatureBlock(InputStream in) throws IOException, GeneralSecurityException {

PKCS7 pkcs7 = new PKCS7(in);

return pkcs7.getCertificates()[0];

}

public static void print_key(String addr) throws FileNotFoundException, IOException, GeneralSecurityException {

//X509Certificate publicKey = readSignatureBlock(new FileInputStream(addr));
X509Certificate publicKey = readSignatureBlock(getX509InputStream(addr));
System.out.println("issuer:" + publicKey.getIssuerDN());

System.out.println("subject:" + publicKey.getSubjectDN());

System.out.println(publicKey.getPublicKey());

}
private static InputStream getX509InputStream(String apkPath) {
InputStream inputStream = null;
//InputStream xmlInputStream = null;
FileInputStream fstream = null;
ZipFile zipFile = null;
try {
zipFile = new ZipFile(apkPath);
//ZipEntry zipEntry = new ZipEntry("META-INFCERT.RSA");//就是这里的问题,我想要读取META-INF文件夹里的CERT.RSA文件,但是这样无法读取到
ZipEntry zipEntry = new ZipEntry("META-INF/");
inputStream = zipFile.getInputStream(zipEntry);
} catch (IOException e) {
e.printStackTrace();
try {
inputStream.close();
fstream.close();
zipFile.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
return inputStream;
}
}

解决方案

 public static void main(String[] args) {
        try {
            Enumeration<URL> urls = X509Util.class.getClassLoader().getResources("META-INF/services/java.nio.file.spi.FileSystemProvider");
            // 你的应该写成 "META-INF/CERT.RSA",注意META前不要有'/'
            while (urls.hasMoreElements()) {
                URL url = urls.nextElement();
                InputStream in = url.openStream();

                BufferedReader br = new BufferedReader(new InputStreamReader(in, "utf-8"));
                System.out.println(br.readLine());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

解决方案二:

需要解答的地方写在代码注释里了,请大神帮忙看看

时间: 2024-09-17 13:53:45

解压-java读取zip压缩文件里面二级文件夹目录内的文件的问题的相关文章

Java无需解压直接读取Zip文件和文件内容

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.ut

gizp-delphi7 如何解压java 压缩的 gzip字符串?我这里总提示data error

问题描述 delphi7 如何解压java 压缩的 gzip字符串?我这里总提示data error 5C 如题,哪位大神知道如何解压gzip字符串?初学delphi 求指导. 解决方案 雇佣一个程序员给你写一个解压缩的控件,你负责拖一个到你的窗口上. 解决方案二: 先试一下用winrar如果能正确解压的话,在delphi里用zlib库来解压

Java创建ZIP压缩文件的方法_java

本文实例讲述了Java创建ZIP压缩文件的方法.分享给大家供大家参考.具体如下: 这里注意:建议使用org.apache.tools.zip.*包下相关类,否则可能会出现中文乱码问题. /** * 压缩文件夹 * @param sourceDIR 文件夹名称(包含路径) * @param targetZipFile 生成zip文件名 * @author liuxiangwei */ public static void zipDIR(String sourceDIR, String target

java基础----&gt;Zip压缩的使用(转)

java中提供了对压缩格式的数据流的读写.它们封装到现成的IO 类中,以提供压缩功能.下面我们开始java中压缩文件的使用.   目录导航: 关于压缩的简要说明 GZIP压缩文件的使用 ZIP压缩文件的使用 GZIP与ZIP压缩的比较 友情链接   关于压缩的简要说明 一. Java中有着压缩的类: CheckedInputStream GetCheckSum()为任何InputStream 产生校验和(不仅是解压) CheckedOutputStream GetCheckSum()为任何Out

.NET(C#)创建和读取zip压缩文档实例

要对zip文件进行操作,主要用到以下三个类: 1.ZipFile.表示与一个zip文件操作相关的类.可以使用该类创建zip文件,或者打开zip文件. 2.ZipArchive.表示一个zip文档实例,可以通过它直接从流对象创建zip文档.ZipFile类主要是针对磁盘文件来进行操作,而ZipArchive表示的是zip包,不一定是存放在硬盘上的.zip文件,因为它可以基于流来创建,所以可以是存在于内存中,或者用于网络传输的数据. 3.ZipArchiveEntry.文档项实体.表示zip压缩包中

利用Java实现zip压缩/解压缩

压缩 利用Java实现zip压缩/解压缩(作者: 2000年07月06日 13:30) 由于网络带宽有限,所以数据文件的压缩有利于数据在Internet上的快速传输,同时也节 省服务器的外存空间. Java 1.1实现了I/O数据流与网络数据流的单一接口,因此数据的压缩.网络传输和解 压缩的实现比较容易,下面介绍利用ZipEntry.ZipInputStream和ZipOutputStream三个Java 类实现zip数据压缩方式的编程方法. zip压缩文件结构:一个zip文件由多个entry组

利用Java实现zip压缩/解压缩_JSP编程

由于网络带宽有限,所以数据文件的压缩有利于数据在Internet上的快速传输,同时也节 省服务器的外存空间. Java 1.1实现了I/O数据流与网络数据流的单一接口,因此数据的压缩.网络传输和解 压缩的实现比较容易,下面介绍利用ZipEntry.ZipInputStream和ZipOutputStream三个Java 类实现zip数据压缩方式的编程方法. zip压缩文件结构:一个zip文件由多个entry组成,每个entry有一个唯一的名称,entry的 数据项存储压缩数据. 与zip文件有关

MySQL 5.6.13 解压版(zip版)安装配置方法_Mysql

[下载MySQL 5.6.13] 从MySQL官方网站mysql.com找到MySQL Community Server 5.6.13的下载地址为http://dev.mysql.com/downloads/mysql/,在这里可以选择操作系统平台.洪哥选择的是Microsoft Windows平台.下面有三个可选的下载文件,第一个是MySQL Installer 5.6 for Windows,这将下载下来一个.msi可执行安装文件.另外有两个解压版(Zip版)分别是Windows (x86,

PHP递归获取目录内所有文件的实现方法_php实例

如下所示: /** * 递归获取文件夹内所有文件 * 返回一个TREE结构的文件系统 * @param string $dir * @param array $filter * @return array $files */ function scan_dir($dir, $filter = array()){ if(!is_dir($dir))return false; $files = array_diff(scandir($dir), array('.', '..')); if(is_ar