相关代码如下
public void readFile(String filePath, String charsetName) {
File file = new File(filePath);
new FileInputStream(file);
...
}
很简单直白,在api 23 的虚拟机里运行也正常,但是在android r的虚拟机里会报如下错误
java.io.FileNotFoundException: /storage/emulated/0/AAA/Setting.gson: open failed: EFAULT (Bad address)
at libcore.io.IoBridge.open(IoBridge.java:492)
at java.io.FileInputStream.<init>(FileInputStream.java:159)
...
Caused by: android.system.ErrnoException: open failed: EFAULT (Bad address)
at libcore.io.Linux.open(Native Method)
at libcore.io.ForwardingOs.open(ForwardingOs.java:166)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:254)
at libcore.io.ForwardingOs.open(ForwardingOs.java:166)
at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:7372)
at libcore.io.IoBridge.open(IoBridge.java:478)
at java.io.FileInputStream.<init>(FileInputStream.java:159)
...
这个程序是两个月前在同一台虚拟机上开发测试的,虚拟机里也能找到开发测试的时候生成的文件,我检查了这几项
file!=null
file.isFile()
file.exists()
file.canRead()
都没问题,那么FileInputStream 为什么会报FileNotFoundException呢?