所以我在手机上使用Excel创建了一个名为theBook.csv
的文件,该文件已保存到手机的Documents
文件夹中。当我尝试列出手机Documents
文件夹的内容时,我收到NullPointerException
,说我尝试了to get length of null array
。
以下是我的尝试:
String path = Environment.getExternalStorageDirectory().toString() + "/Documents";
// I have also tried:
// String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS);
// and
// String path = Environment.getRootDirectory().getAbsolutePath() + "/Documents";
Log.i("Files", "The path is: " + path);
File f = new File(path);
File file[] = f.listFiles();
try {
Log.i("Files", "Number of files: "+ file.length);
for (int i = 0; i < file.length; i++) {
Log.i("Files", "Found file with name:" + file[i].getName());
}
} catch (NullPointerException e) {
entoast("NPE"); // my toast message method
e.printStackTrace();
}
当我查看日志时,path
的值为/storage/emulated/0/Documents
(无论我尝试的三行中的哪一行),我都不确定它是否与Documents
相对应theBook.csv
所在的文件夹。如果是,为什么theBook.csv
不会显示在日志文件中?如果没有,我如何让我的程序访问手机的实际Documents
文件夹,而不仅仅是一个空目录?
通过USB连接手机进行文件传输时,可以查看“文档”文件夹,使用手机内置的文件浏览器时也可以查看。我在手机上运行Android 6.0,虽然该应用程序的最低要求SDK是Android 4.1。我的清单文件中也有<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
行。
答案 0 :(得分:0)
READ_EXTERNAL_STORAGE属于危险类别权限,您应该请求权限运行时间。 Android 6.0中添加了此功能。
检查是否授予许可
// Assume thisActivity is the current activity
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_EXTERNAL_STORAGE);
如果应用程序具有权限,则该方法返回PackageManager.PERMISSION_GRANTED,应用程序可继续执行该操作。其他请求权限运行时间。
有关详细信息,请访问android官方文档
Requesting Permissions at Run Time
有关危险许可的完整列表https://developer.android.com/guide/topics/security/permissions.html