首页 > 解决方案 > android 11 open 上读写文件时出错:EACCES(权限被拒绝)

问题描述

自 android 11 发布以来,我遇到了几个我在 android 10 中没有的问题,主要问题是我正在使用权限的文件读写系统<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>但是当我要使用 FileInputStream 来读取json 文件,我总是得到这个错误:

11443-11443 W/System.err: java.io.FileNotFoundException: /storage/emulated/0/Documents/Brizas-app/configs/database.json: open failed: EACCES (Permission denied)
11443-11443 W/System.err: at libcore.io.IoBridge.open(IoBridge.java:492)
11443-11443 W/System.err: at java.io.FileInputStream.<init>(FileInputStream.java:160)
11443-11443 W/System.err: at com.brizaloka.brizasapp.ui.gadgets.fetchJson.loadJSONFromAsset(fetchJson.java:79)
11443-11443 W/System.err: at com.brizaloka.brizasapp.ui.api_insert.Insert.onCreateView(Insert.java:112)
11443-11443 W/System.err: at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
11443-11443 W/System.err: at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
11443-11443 W/System.err: at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
11443-11443 W/System.err: at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
11443-11443 W/System.err: at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
11443-11443 W/System.err: at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
11443-11443 W/System.err: at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
11443-11443 W/System.err: at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
11443-11443 W/System.err: at android.os.Handler.handleCallback(Handler.java:938)
11443-11443 W/System.err: at android.os.Handler.dispatchMessage(Handler.java:99)
11443-11443 W/System.err: at android.os.Looper.loop(Looper.java:236)
11443-11443 W/System.err: at android.app.ActivityThread.main(ActivityThread.java:7864)
11443-11443 W/System.err: at java.lang.reflect.Method.invoke(Native Method)
11443-11443 W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620)
11443-11443 W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011)

我正在尝试一切使用,我什至使用了权限<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>,但它在 Play 商店中不被接受,所以我删除了它,这就是我在使用 android 10 上读取文件时所做的一切,老实说android:requestLegacyExternalStorage="true"android:allowBackup="true" 我不知道错误在哪里因为在以前的 api 中它们工作得很好

我用来读取 json 文件的函数:

public static JSONObject loadJSONFromAsset(Context context, String filename) {
        JSONObject json = null;
        File file = new File(filename);
        try {
            FileInputStream is = new FileInputStream(file);

            int size = is.available();

            byte[] buffer = new byte[size];

            is.read(buffer);

            is.close();

             json = new JSONObject(new String(buffer, "UTF-8"));


        } catch (IOException | JSONException ex) {
            ex.printStackTrace();
            return null;
        }
        return json;

    }

标签: javaandroidandroid-studio

解决方案


推荐阅读