Java 将文件从内部存储器加载到InputStream的方式与从资产加载的方式相同
我正在从以下资产中成功加载并使用PKCS12文件Cert.pfx:Java 将文件从内部存储器加载到InputStream的方式与从资产加载的方式相同,java,android,inputstream,fileinputstream,bufferedinputstream,Java,Android,Inputstream,Fileinputstream,Bufferedinputstream,我正在从以下资产中成功加载并使用PKCS12文件Cert.pfx: String certLocation = "certificates/Cert.pfx"; InputStream isCert = null; try { isCert = getAssets().open(certLocation); } catch (Exception e) { Log.d(TAG, "Could not get Assets"); } // Work with the cer
String certLocation = "certificates/Cert.pfx";
InputStream isCert = null;
try {
isCert = getAssets().open(certLocation);
} catch (Exception e) {
Log.d(TAG, "Could not get Assets");
}
// Work with the certificate
我现在也在试着做同样的事情,但是我在安卓系统的存储中阅读
File sdCard = Environment.getExternalStorageDirectory();
File dir = new File (sdCard.getAbsolutePath() + "/PrintableRSA");
File cert = new File(dir,"Cert.pfx");
InputStream isCert= null;
try {
isCert = new BufferedInputStream(new FileInputStream(cert));
isCert.close();
Log.d(TAG,"Sucsess!");
} catch (Exception e) {
Log.d(TAG, "Could not load the file");
}
// Same work with the certificate
文件加载成功,但当我进一步使用从存储器加载的isCert InputStream时,它不起作用。因此,我怀疑这些文件是不相等的
我还尝试了InputStream isCert=FileInputStream(cert)代码>未成功
如何解决此问题 您显然无法在标记为“使用证书进行相同的工作”的点上使用InputStream,因为您已经在该点上调用了close()
完成流后,将调用移动到close()
到。这取决于“不工作”的含义…为什么将外部内存称为内部内存?因为如果外部内存不可用,android会自动选择内部内存。这就是我想要的。我检查了我的原始代码。我在isCert
声明和isCert.close()语句之间有一个this.myCert=isCert
。我错误地认为InputStream在该点被复制。我猜当isCert
关闭时,this.myCert
也会变成null
。你能证实这一点吗?