首页 > 解决方案 > 读取文件产生 NullPointerException

问题描述

我正在尝试在我的 Android 程序中打开文件选择器,如下所示:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("*/*");
        intent.addCategory(Intent.CATEGORY_OPENABLE);

现在在里面onActivityResult,我在做:

Uri uri = data.getData();
                    Log.d(TAG, "File Uri: " + uri.toString());
                    path = MainActivity.getPath(this, uri);
                    Log.d(TAG, "File Path: " + path);
                    try {
                        //readFile(uri.toString())
                        readFile(path);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

在读取文件中,我只是想读取它的内容,这给了我 nullPointerException。


    private static void readFile(String path) throws Exception {
        Log.d(TAG,"inside readFile -->> "+path);
        String data=MainActivity.getStringFromFile(path);
        Log.d(TAG,"data "+data);
    }



    public static String convertStreamToString(InputStream is) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line).append("\n");
        }
        reader.close();
        return sb.toString();
    }

    public static String getStringFromFile (String filePath) throws Exception {
        File fl = new File(filePath);
        FileInputStream fin = new FileInputStream(fl);
        String ret = convertStreamToString(fin);
        fin.close();
        return ret;
    }

我该如何解决这个问题?

即使我已经获得了外部存储许可,尽管我没有。

路径看起来像这样:/storage/emulated/0/CodeRead/springboot-react-chatroom-master/springboot-react-chatroom-master/README.md

和 URI:content://com.mi.android.globalFileexplorer.myprovider/external_files/CodeRead/springboot-react-chatroom-master/springboot-react-chatroom-master/README.md

痕迹 :

2020-04-01 17:26:00.502 22327-22327/com.org.orgcodereader W/System.err:     at com.org.orgcodereader.activity.MainActivity.getStringFromFile(MainActivity.java:165)
2020-04-01 17:26:00.502 22327-22327/com.org.orgcodereader W/System.err:     at com.org.orgcodereader.activity.MainActivity.readFile(MainActivity.java:147)
2020-04-01 17:26:00.502 22327-22327/com.org.orgcodereader W/System.err:     at com.org.orgcodereader.activity.MainActivity.onActivityResult(MainActivity.java:135)
2020-04-01 17:26:00.503 22327-22327/com.org.orgcodereader W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6864)
2020-04-01 17:26:00.503 22327-22327/com.org.orgcodereader W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

我注意到有时MainActivity.getStringFromFile(path);正在生产null,所以会发生这种情况。我猜这背后有特殊的原因,如果我选择最近或其他选项,但如果我选择FileManager它工作正常。

当我选择其他方法时,URI 看起来就像这样:

content://com.android.externalstorage.documents/document/primary%3APictures%2FInstagram%2FIMG_20200305_214854_891.jpg

标签: javaandroidfilenullpointerexceptionuri

解决方案


推荐阅读