试图获取目录中文件数的致命错误
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);
}
}
}
最终我想要一个包含目录中所有文件名称的数组。但是使用此代码
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);
}
}
}