为什么会报出NullPointerException
这个IO程序不知道为什么会报出NullPointerException,该怎么解决呢?package com.io2;
import java.io.File;
import java.util.ArrayList;
public class ListAllTest
{
//用于判断目录或文件所处的层次
private static int time;
// 递归的方法
public static void deepList(File file) throws NullPointerException
{
if (file.isFile() || 0 == file.listFiles().length)
{
return ;
}
else
{
File[] files = file.listFiles();
files = sort(files);
for(File f : files)
{
StringBuffer output = new StringBuffer();
if(f.isFile())
{
output.append(getTabs(time));
output.append(f.getName());
}
else
{
output.append(getTabs(time));
output.append(f.getName());
output.append("\\");
}
System.out.println(output);
if(f.isDirectory())
{
time++;
deepList(f);
time--;
}
}
}
}
// 整理文件数组,使得目录排在文件之前
private static File[] sort(File[] files)
{
ArrayList<File> sorted = new ArrayList<File>();
// 寻找到所有的目录
for (File f : files)
{
if (f.isDirectory())
{
sorted.add(f);
}
}
// 寻找到所有的文件
for (File f : files)
{
if (f.isFile())
{
sorted.add(f);
}
}
return sorted.toArray(new File[files.length]);
}
//判断需要加多少tab的方法
private static String getTabs(int time)
{
StringBuffer buffer = new StringBuffer();
for(int i = 0; i < time; i++)
{
buffer.append("\t");
}
return buffer.toString();
}
public static void main(String[] args)
{
File file = new File("C:\\ProgramData");
deepList(file);
}
}
IO File StringBuffer --------------------编程问答-------------------- 程序本身没有问题,因为你读的是系统盘里的文件信息,操作系统给予应用程序访问系统文件的权限和访问非系统文件的权限是不同的.程序在试图读取系统盘里的文件的信息时没有获得访问的权限,所以会报出NullPointerException.这点很好理解:如果应用程序能随意读写系统文件,那么系统就会很不安全. --------------------编程问答-------------------- 判断是不是目录的时候海牙加上一条,如果是隐藏的就跳过,如果是不可读的也需要跳过 --------------------编程问答-------------------- 隐藏的文件夹不会有问题 之前还考虑会不会是.和..文件夹造成的,测试后发现不是,目前不清楚空指针是什么原因造成的。 --------------------编程问答--------------------
测试无问题,看看你的详细报错信息吧
补充:Java , Java SE