android 获得一个文件的 输入流。
同一个文件夹下的图片文件能获取到 fileInputStream。
但是xlsx和apk等其他的文件好像无法获取到对应的 输入流。和 能够获取到流的图片 是在同一个目录下。
望指点一下:
报错主要提示是权限问题: (同一个目录下的图片能过够拿到,我也获取到了权限)
java.lang.RuntimeException: java.io.FileNotFoundException: /storage/emulated/0/Download/test.xlsx: open failed: EACCES (Permission denied)
你用的安卓模拟器是12的,所以需要其他类型的文件还要申请所有文件的访问权限
android.Manifest.permission.MANAGE_EXTERNAL_STORAGE
这个错误是因为你的应用没有权限访问那些文件。有几个解决办法:
1. 在AndroidManifest.xml中添加权限。例如要访问apk文件,添加:
xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
2. 请求运行时权限。在Android 6.0及更高版本,需要请求运行时权限访问文件:
java
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}
然后在onRequestPermissionsResult()方法中检查是否获得权限:
java
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission granted
} else {
// Permission denied
}
3. 如果目标文件在应用的私有目录下,需要使用Context.openFileInput()或Context.openFileOutput()方法进行访问。而不应该直接使用FileInputStream。因为私有目录下的文件只有通过Context的API才能访问。
4. 检查文件是否存在,以及其文件权限。可以使用File.exists()和File.canRead()方法检查。如果文件不可读,需要先改变其文件权限,或者通过上述权限申请的方式来访问。