我想在不解壓的條件下得到一個壓縮文件夾內部的二級目錄下的文件流,但是搜了好久也沒找到
代碼如下
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;
}
}
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();
}
}