将文件从内部存储加载到InputStream的方式与从Assets中加载方式相同

时间:2014-08-26 14:43:29

标签: java android inputstream fileinputstream bufferedinputstream

我正在成功加载并使用Assets中的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 certificate

我现在正尝试这样做,但是从Android中的存储中读取。

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);失败了。

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

在您标记为“与证书相同的工作”时,您显然无法使用InputStream,因为此时您已经在其上调用了close()

完成信息流后,将您的电话转移至close()