public class Demo_GetFiles {
public static void main(String[] args) {
// TODO Auto-generated method stub
File dir=new File("G:\\");
//getFiles(dir); //依据此进行分析 中间出现了空指针
listToAll(dir);
}
public static void listToAll(File dir) {
System.out.println("目录:"+dir+"------");
File [] files=dir.listFiles();
//if (files!=null) //这里判断非空就是为了去除隐藏文件
//return; //加上就会只遍历一个盘符 说明有空 整个数组中包含到隐藏文件
//然后放到数组中但是隐藏文件没有访问权限所以for进行遍历是无法访问就空指针了
//因此在加上canWrite() canRead()应该更好
/*listFiles public File[] listFiles()
* 如果目录为空,那么数组也将为空。如果抽象路径名不表示一个目录,
* 或者发生 I/O 错误,则返回 null。
可能盘里有空的目录。
否则返回一个 File 对象数组,
每个数组元素对应目录中的每个文件或目录。
经过1个小时的调试,终于解决
因此需要for循环前面用个if语句判断是否files为null即可解决。*/
/* if (files.length==0) {
return ;
}*/
for (File file : files) {
/* if(file.isHidden()){
return ;
}*/
if (file.isDirectory()&&!file.isHidden()&&file.canRead()&&file.canWrite()) {
//加上非隐藏 这样不会遍历到隐藏文件 是否可读 可写 这样就可以解决了
listToAll(file);
}else {
System.out.println("文件:"+file.getName());
}
//System.out.println(file.getName()+"...........");
}
}
public static void getFiles(File dir) {
File [] files=dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
File[] filess=file.listFiles();
for (File file2 : filess) {
System.out.println(file2.getName());
}
}else{
System.out.println("-------------------");
System.out.println(file.getName());
}
}
}
}
|