java - 读取文件产生 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