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

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条)

报告相同问题?

悬赏问题

  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择