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

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();
            }
        }
    
    打赏 评论
  • class_brick 2016-02-23 09:26

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

    打赏 评论