FileUtils.readFileToString IOException

FileUtils.readFileToString IOException

我是 Android 应用程序开发的新手。目前,我正在尝试获取 Android 下载文件夹路径并将其记录下来。为此,我使用了 commons io 库。我有这个代码:

    File folder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
    Log.e("files", folder.listFiles().length + " items");
try {
    String DFOLDER = FileUtils.readFileToString(folder);
    Log.i(TAG2, DFOLDER);
}catch (IOException e){
    Toast.makeText(getApplicationContext(), R.string.fail,
            Toast.LENGTH_SHORT).show();
}

出于某种原因,我每次都收到 IOException,但我从第 2 行收到文件夹中的文件数量。

我在清单中有此权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

根据Commons IO 2.4 API,readFileToString 方法将一个文件作为参数,然后将文件的内容读入一个String。但是,getExternalStoragePublicDirectory 方法 returns 一个文件夹而不是一个文件,因此调用 readFileToString 将引发 IO 异常。

FileUtils.readFileToString 将文件内容读入字符串。 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) return 目录,而不是文件,因此在其上使用 readFileToString 将抛出 IOException。如果你想读取下载目录中所有文件的内容,就这样做吧。

 File folder = Environment.getExternalStoragePublicDirectory(Environmeng t.DIRECTORY_DOWNLOADS);
 for(File file:folder.listFiles()){
  try {
    String DFOLDER = FileUtils.readFileToString(file);
    Log.i("File Contents ", DFOLDER);
  } catch (IOException e) {
    Toast.makeText(getApplicationContext(), "Failed!", Toast.LENGTH_SHORT).show();
  }
}

如果该目录中的文件太多,它可能会抛出 OutOfMemoryError。

编辑:如果您需要 foler 的路径,请使用

 File folder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
 Log.i("Folder Path",folder.getAbsolutePath());