class_brick 2016-02-23 08:45 采纳率: 100%
浏览 3838
已采纳

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-INF\CERT.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;
}
}

  • 写回答

2条回答 默认 最新

  • 渔夫tj 2016-02-24 01:59
    关注
     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();
            }
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 python变量和列表之间的相互影响
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)