Android: 列出目录下的所有文件
Android: List all file in a directory
我正在尝试构建一个列出目录中所有文件并允许用户点击文件并根据文件扩展名在特定应用程序中打开它的应用程序。到目前为止,我已经编写了这段代码来列出目录中的所有文件,但它似乎不起作用——它只会使应用程序崩溃。
有人能告诉我为什么吗?我试图复制我在 SO 和其他不同地方找到的其他代码片段,但 none 似乎有效。
提前致谢
String home = Environment.getExternalStorageDirectory().toString() + "/vuza/" + username;
Toast.makeText(this, "Debug: " + home, Toast.LENGTH_SHORT).show();
File root = new File(home);
File fileList[] = root.listFiles();
for(int x = 0; x < fileList.length; x++) {
Toast.makeText(this, fileList[x].getName(), Toast.LENGTH_SHORT).show();
}
编辑:添加堆栈跟踪
04-08 19:29:39.230 5264-5264/com.mikekaperys.assignment E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.mikekaperys.assignment, PID: 5264
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mikekaperys.assignment/com.mikekaperys.assignment.Files}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
at android.app.ActivityThread.access0(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.mikekaperys.assignment.Files.onCreate(Files.java:32)
at android.app.Activity.performCreate(Activity.java:5426)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
at android.app.ActivityThread.access0(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
1) 将其放入清单中:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
2) 还要检查 home
路径是否存在。
3) fileList.length
如果其中没有目录,可能 return 为 null。在 loop
.
之前检查 fileList
是否为 null
用以下代码替换您的代码
String home = Environment.getExternalStorageDirectory().toString() + "/vuza/" + username;
文件文件=新文件(主页);
if(file.exists())
{
//method call
listf(home);
}
else
{
Toast.makeText(this,"no dir extists"), Toast.LENGTH_SHORT).show();
}
public File[] listf(String directoryName) {
// .............list file
File directory = new File(directoryName);
// get all the files from a directory
File[] fList = directory.listFiles();
for (File file : fList) {
if (file.isFile()) {
System.out.println(file.getAbsolutePath());
} else if (file.isDirectory()) {
listf(file.getAbsolutePath());
}
}
System.out.println(fList);
return fList;
}
还要确保您已授予以下权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
我正在尝试构建一个列出目录中所有文件并允许用户点击文件并根据文件扩展名在特定应用程序中打开它的应用程序。到目前为止,我已经编写了这段代码来列出目录中的所有文件,但它似乎不起作用——它只会使应用程序崩溃。
有人能告诉我为什么吗?我试图复制我在 SO 和其他不同地方找到的其他代码片段,但 none 似乎有效。
提前致谢
String home = Environment.getExternalStorageDirectory().toString() + "/vuza/" + username;
Toast.makeText(this, "Debug: " + home, Toast.LENGTH_SHORT).show();
File root = new File(home);
File fileList[] = root.listFiles();
for(int x = 0; x < fileList.length; x++) {
Toast.makeText(this, fileList[x].getName(), Toast.LENGTH_SHORT).show();
}
编辑:添加堆栈跟踪
04-08 19:29:39.230 5264-5264/com.mikekaperys.assignment E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.mikekaperys.assignment, PID: 5264
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mikekaperys.assignment/com.mikekaperys.assignment.Files}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
at android.app.ActivityThread.access0(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.mikekaperys.assignment.Files.onCreate(Files.java:32)
at android.app.Activity.performCreate(Activity.java:5426)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
at android.app.ActivityThread.access0(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
1) 将其放入清单中:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
2) 还要检查 home
路径是否存在。
3) fileList.length
如果其中没有目录,可能 return 为 null。在 loop
.
fileList
是否为 null
用以下代码替换您的代码
String home = Environment.getExternalStorageDirectory().toString() + "/vuza/" + username;
文件文件=新文件(主页);
if(file.exists())
{
//method call
listf(home);
}
else
{
Toast.makeText(this,"no dir extists"), Toast.LENGTH_SHORT).show();
}
public File[] listf(String directoryName) {
// .............list file
File directory = new File(directoryName);
// get all the files from a directory
File[] fList = directory.listFiles();
for (File file : fList) {
if (file.isFile()) {
System.out.println(file.getAbsolutePath());
} else if (file.isDirectory()) {
listf(file.getAbsolutePath());
}
}
System.out.println(fList);
return fList;
}
还要确保您已授予以下权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />