黑马程序员技术交流社区
标题: 查询某个文件下的以txt结尾的文件 [打印本页]
作者: 罗宵 时间: 2012-7-26 23:04
标题: 查询某个文件下的以txt结尾的文件
public static void main(String[] args) {
File dir=new File("d:\\");
ArrayList <File>al1=new ArrayList<File>();
ArrayList<File> al=new ArrayList<File>();
al=getTxt(dir,al1);
Iterator<File> it=al.iterator();
if(it.hasNext()){
File file=it.next();
System.out.println(file.getName());
}
}
public static ArrayList<File> getTxt(File dir,ArrayList<File> al){
File[] files=dir.listFiles();
for(File file:files){
if(file.isDirectory()){
getTxt(file,al);
}
else{
if(file.getName().endsWith(".txt"))
al.add(file);
}
}
return al;
}
}
为什么会抛出Exception in thread "main" java.lang.NullPointerException
at com.itheima.Test8.getTxt(Test8.java:25)
at com.itheima.Test8.getTxt(Test8.java:27)
at com.itheima.Test8.getTxt(Test8.java:27)
at com.itheima.Test8.main(Test8.java:16)
作者: 张頔 时间: 2012-7-26 23:33
import java.io.*;
import java.util.*;
public class find {
public static void main(String[] args){
File dir=new File("g:\\");
ArrayList <File>al1=new ArrayList<File>();
ArrayList<File> al=new ArrayList<File>();
al=getTxt(dir,al1);
Iterator<File> it=al.iterator();
while(true){//给你加了一个while循环这样可以全部输出
if(it.hasNext()){
File file=it.next();
System.out.println(file.getName());
}else break;
}
}
public static ArrayList<File> getTxt(File dir,ArrayList<File> al){
File[] files=dir.listFiles();
for(File file:files){
if(file.isDirectory()){
getTxt(file,al);
}
else{
if(file.getName().endsWith(".txt"))
al.add(file);
}
}
return al;
}
}
但是我没有出现你数的错误
因为我换了个盘符
而且把d:\\范围减少,指定一个文件夹
就能正确运行
搞不懂
作者: 淡然 时间: 2012-7-26 23:35
本帖最后由 淡然 于 2012-7-26 23:38 编辑
d:\System Volume Information
Exception in thread "main" java.lang.NullPointerException
at hcy.test.main.Test.getTxt(Test.java:89)
at hcy.test.main.Test.getTxt(Test.java:92)
at hcy.test.main.Test.main(Test.java:56)
System Volume Information是windows系统文件夹,中文名称可以翻译为“系统卷标信息”。这个文件夹里就存储着系统还原的备份信息。
System Volume Information这个文件夹是不能访问的,它的dir.listFiles()返回值为null
从硬盘根目录遍历文件时要特别小心这个文件夹,可在遍历前判断listFiles()返回值是否为null
public static ArrayList<File> getTxt(File dir,ArrayList<File> al){
File[] files=dir.listFiles();
if(files!=null){
for(File file:files){
// System.out.println(file);
if(file.isDirectory()){
getTxt(file,al);
}
else{
if(file.getName().endsWith(".txt")){
al.add(file);
// System.out.println(al+" *** "+file);
}
}
}
}
return al;
}
作者: 王志明 时间: 2012-7-27 01:08
*我对楼主的代码进行了改进,注释都加的很清楚,对指定目录遍历用到的是递归算法
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class Test1 {
public static void main(String[] args) {
//要遍历的目录
File dir = new File("src");
//遍历指定目录后得到的File对象放在次List集合中
List<File> txtFiles = new ArrayList<File>();
//到指定目录下面去查找txt文件
getTxtFiles(dir, txtFiles);
//对结果进行遍历
for (File file : txtFiles) {
System.out.println(file.getName());
}
}
//在指定目录下查找所有的txt文件
public static void getTxtFiles(File file, List<File> txtFiels) {
//如果是目录
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File f : files) {
getTxtFiles(f, txtFiels);
}
} else {//如果是文件
if (file.getName().endsWith(".txt"))
txtFiels.add(file);
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |