试图获取目录中文件数的致命错误

Fatal Error trying to get number of files in a directory

最终我想要一个包含目录中所有文件名称的数组。但是使用此代码

File f = new File(getFilesDir().toString());
File F[] = f.listFiles();
int i = 0;
for(File entry: F){
    i++;
}

Toast.makeText(MainActivity.this,i, Toast.LENGTH_SHORT).show();

即使只计算文件数量也是行不通的。当我尝试显示该值时收到此错误。

02-07 01:25:47.490 21262-21262/com.mydomain.www.notepad5 E/AndroidRuntime: FATAL EXCEPTION: main
   android.content.res.Resources$NotFoundException: String resource ID #0x3
       at android.content.res.Resources.getText(Resources.java:231)
       at android.widget.Toast.makeText(Toast.java:265)
       at com.mydomain.www.notepad5.MainActivity.onDrawerOpened(MainActivity.java:109)
       at android.support.v4.widget.DrawerLayout.dispatchOnDrawerOpened(DrawerLayout.java:740)
       at android.support.v4.widget.DrawerLayout.updateDrawerState(DrawerLayout.java:700)
       at android.support.v4.widget.DrawerLayout$ViewDragCallback.onViewDragStateChanged(DrawerLayout.java:1833)
       at android.support.v4.widget.ViewDragHelper.setDragState(ViewDragHelper.java:874)
       at android.support.v4.widget.ViewDragHelper.run(ViewDragHelper.java:335)
       at android.os.Handler.handleCallback(Handler.java:615)
       at android.os.Handler.dispatchMessage(Handler.java:92)
       at android.os.Looper.loop(Looper.java:137)
       at android.app.ActivityThread.main(ActivityThread.java:5118)
       at java.lang.reflect.Method.invokeNative(Native Method)
       at java.lang.reflect.Method.invoke(Method.java:511)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
       at dalvik.system.NativeStart.main(Native Method)
02-07 01:25:48.904 21262-21262/com.mydomain.www.notepad5 I/Process: Sending signal. PID: 21262 SIG: 9

使用F.length也不行。但是我可以显示所有文件的名称。

您正在调用 AlertDialog.Builder.setMessage(int),它需要一个资源 ID,但您没有包含您提供的 ID 的字符串资源。你想打电话给 AlertDialog.Builder.setMessage(CharSequence).

改为使用 setMessage(String.valueOf(numFiles)) 将整数解析为字符串,以便调用 setMessage 的正确重载版本。

编辑:

您已将异常更新为使用 Toast.makeText,但对于被解释为资源 ID 的 int 仍然适用。

编辑 2:

这里的代码将获取目录中所有文件名的数组。

File[] files = f.listFiles();
String[] fileNames = new String[files.length];
for (int i = 0; i < files.length; i++) {
    fileNames[i] = files[i].getName();
}
public void listf(String directoryName, ArrayList<File> files) {
File directory = new File(directoryName);

// get all the files from a directory
File[] fList = directory.listFiles();
for (File file : fList) {
    if (file.isFile()) {
        files.add(file);
    } else if (file.isDirectory()) {
        listf(file.getAbsolutePath(), files);
    }
}

}