在我的代码中,我正在动态地形成一个字符串数组。 然后,当我尝试通过"长度"来获取数组的大小时属性,应用程序崩溃发出空指针异常。 还有另一种获取数组长度的方法吗?
File Cur_folder=new File(""+folder.toString());
String[] dirList=Cur_folder.list();
int c=dirList.length;
Log cat:
07-23 03:02:40.477: E/AndroidRuntime(1576): FATAL EXCEPTION: AsyncTask #1
07-23 03:02:40.477: E/AndroidRuntime(1576): Process: com.example.nusearch, PID: 1576
07-23 03:02:40.477: E/AndroidRuntime(1576): java.lang.RuntimeException: An error occured while executing doInBackground()
07-23 03:02:40.477: E/AndroidRuntime(1576): at android.os.AsyncTask$3.done(AsyncTask.java:300)
07-23 03:02:40.477: E/AndroidRuntime(1576): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
07-23 03:02:40.477: E/AndroidRuntime(1576): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
07-23 03:02:40.477: E/AndroidRuntime(1576): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
07-23 03:02:40.477: E/AndroidRuntime(1576): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
07-23 03:02:40.477: E/AndroidRuntime(1576): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
07-23 03:02:40.477: E/AndroidRuntime(1576): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
07-23 03:02:40.477: E/AndroidRuntime(1576): at java.lang.Thread.run(Thread.java:841)
07-23 03:02:40.477: E/AndroidRuntime(1576): Caused by: java.lang.NullPointerException
07-23 03:02:40.477: E/AndroidRuntime(1576): at com.example.nusearch.MainActivity$StartIndexing.doInBackground(MainActivity.java:97)
07-23 03:02:40.477: E/AndroidRuntime(1576): at com.example.nusearch.MainActivity$StartIndexing.doInBackground(MainActivity.java:1)
07-23 03:02:40.477: E/AndroidRuntime(1576): at android.os.AsyncTask$2.call(AsyncTask.java:288)
07-23 03:02:40.477: E/AndroidRuntime(1576): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
07-23 03:02:40.477: E/AndroidRuntime(1576): ... 4 more
答案 0 :(得分:1)
堆栈跟踪正在讨论Null指针异常,这意味着您描述为File对象的Cur_folder
没有正确的路径。
当您调用方法list()
时,它可以返回String数组中的文件列表或null。
以下是有关list()
方法的文档。将金额直接存入整数是不安全的。
public String [] list()
返回一个字符串数组,用于命名文件和目录 此抽象路径名表示的目录。
如果此抽象路径名不表示目录,那么这个 方法返回null。否则返回一个字符串数组,一个 对于目录中的每个文件或目录。名称表示 目录本身和目录的父目录不包括在内 在结果中。每个字符串都是文件名而不是完整路径。 (...)
文档链接:http://docs.oracle.com/javase/7/docs/api/java/io/File.html#list%28%29
答案 1 :(得分:0)
检查文件夹是否存在是一个好习惯,我还建议您始终使用 try catch 保护文件访问代码。
int c = 0;
try {
File Cur_folder = new File("" + folder.toString());
if (Cur_folder.exists()) {
String[] dirList = Cur_folder.list();
c = dirList.length;
}
}
catch (Exception e)
{
Log.e(TAG,"Something failed. Check traces below for details!");
e.printStackTrace();
}
// if any error happened then here you find c = 0
// if other case, c = number of files in Cur_folder
注意: