Android 尽管已授予权限,但读取文件会导致崩溃

Android 尽管已授予权限,但读取文件会导致崩溃,android,android-manifest,bufferedreader,android-permissions,Android,Android Manifest,Bufferedreader,Android Permissions,我有一个名为“kaAllNodesNumbered.txt”的文本文件,它保存在一个名为“database”的目录下,该目录保存在externalStorage中。我访问此文本文件的方式如下: File file = new File(Environment.getExternalStorageDirectory() + "/database/" + "kaAllNodesNumbered.txt"); if (file.exists()) { Log.i(TAG, "file.

我有一个名为“kaAllNodesNumbered.txt”的文本文件,它保存在一个名为“database”的目录下,该目录保存在externalStorage中。我访问此文本文件的方式如下:

File file = new File(Environment.getExternalStorageDirectory() + "/database/" + "kaAllNodesNumbered.txt");
    if (file.exists()) {
    Log.i(TAG, "file.exists: " + file.exists());
    populate.populate(this, file);
  }
上述代码中的if语句返回true,并调用方法
populate(this,file)
。该方法的主体如下所示。问题是,尽管文本文件“kaAllNodesNumbered.txt”存在,并且清单文件中授予了所需的权限,如下所示,但是,当我运行应用程序时,下面代码中的第38行会导致NPE,我收到如下所示的警告

为什么我在文件存在且权限已授予的情况下仍收到此类错误和警告

填充

public void populate(Context context, File file) {
    this.mCtx = context;
    this.mSQLiteHelper = new SQLiteHelper(this.mCtx);
    //this.mSQLiteHelper.deleteALLRows();
    //Log.i(TAG, "total rows: " + this.mSQLiteHelper.getTotalRowsInDB());

    try {
        this.mFR = new FileReader(file);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    this.mBR = new BufferedReader(this.mFR); //LINE 38  <<<<=============
    ...
    ...
    ...
}
public void填充(上下文、文件){
this.mCtx=上下文;
this.msqliteheloper=新的SQLiteHelper(this.mCtx);
//this.msqliteheloper.deleteALLRows();
//Log.i(标记“总计行数:”+this.msqliteheloper.getTotalRowsInDB());
试一试{
this.mFR=新文件读取器(文件);
}catch(filenotfounde异常){
e、 printStackTrace();
}

this.mBR=new BufferedReader(this.mFR);//第38行如日志所述
kaAllNodes.txt:open失败:
**EACCES(权限被拒绝)**
-在使用android棉花糖及更高版本时,从外部内存读取/写入时需要执行此操作()。
现在,要获得权限,您需要调用Android的权限活动,并在活动结果中执行代码(如何实现指南)

,正如日志所述
kaAllNodes.txt:open failed:
**EACCES(权限被拒绝)**
-使用android棉花糖及以上版本时,从外部内存读取/写入时需要进行以下操作()。
现在要获得权限,您需要调用Android的权限活动,并在活动结果中执行代码(如何实施指南)

您的错误显示为
java.io.FileNotFoundException:…/kaAllNodes.txt
,但看起来您正试图打开
kaallnodesnumber.txt
,也许您在代码中的某个地方键入了错误?您的错误显示为
java.io.FileNotFoundException:…/kaAllNodes.txt
,但看起来您正试图打开
kaAllNodesNumbered.txt
,可能是您在代码中的某个地方输入了错误?
java.io.FileNotFoundException: /storage/emulated/0/database/kaAllNodes.txt: open failed: EACCES (Permission denied)
08-11 14:53:37.822 25066-25066/com.example.com.ecoassistant_03 W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:452)
08-11 14:53:37.822 25066-25066/com.example.com.ecoassistant_03 W/System.err:     at java.io.FileInputStream.<init>(FileInputStream.java:76)
08-11 14:53:37.822 25066-25066/com.example.com.ecoassistant_03 W/System.err:     at java.io.FileReader.<init>(FileReader.java:42)
08-11 14:53:37.822 25066-25066/com.example.com.ecoassistant_03 W/System.err:     at com.example.com.ecoassistant_03.Populator.populate(Populator.java:34)
08-11 14:53:37.822 25066-25066/com.example.com.ecoassistant_03 W/System.err:     at com.example.com.ecoassistant_03.ActMain.onOptionsItemSelected(ActMain.java:1185)
08-11 14:53:37.822 25066-25066/com.example.com.ecoassistant_03 W/System.err:     at android.app.Activity.onMenuItemSelected(Activity.java:3205)
08-11 14:53:37.822 25066-25066/com.example.com.ecoassistant_03 W/System.err:     at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:361)
08-11 14:53:37.822 25066-25066/com.example.com.ecoassistant_03 W/System.err:     at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:147)

 java.lang.NullPointerException: lock == null
08-11 13:51:59.106 3380-3380/com.example.com.ecoassistant_03 E/AndroidRuntime:     at java.io.Reader.<init>(Reader.java:64)
08-11 13:51:59.106 3380-3380/com.example.com.ecoassistant_03 E/AndroidRuntime:     at java.io.BufferedReader.<init>(BufferedReader.java:107)
08-11 13:51:59.106 3380-3380/com.example.com.ecoassistant_03 E/AndroidRuntime:     at java.io.BufferedReader.<init>(BufferedReader.java:95)
08-11 13:51:59.106 3380-3380/com.example.com.ecoassistant_03 E/AndroidRuntime:     at com.example.com.ecoassistant_03.Populator.populate(Populator.java:38)
08-11 13:51:59.106 3380-3380/com.example.com.ecoassistant_03 E/AndroidRuntime:     at com.example.com.ecoassistant_03.ActMain.onOptionsItemSelected(ActMain.java:1182)
08-11 13:51:59.106 3380-3380/com.example.com.ecoassistant_03 E/AndroidRuntime:     at android.app.Activity.onMenuItemSelected(Activity.java:3205)
    </application>
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
</manifest>