黑马程序员技术交流社区
标题:
关于使用FilenameFilter的问题
[打印本页]
作者:
邱本超老师
时间:
2011-11-6 22:00
import java.io.File;
import java.io.IOException;
public class TestReadSubDirectory {
public static void main(String[] args) throws IOException {
TestReadSubDirectory p = new TestReadSubDirectory();
p.read("\\user\\123\\1");
}
public void read(String filepath) throws IOException {
File f = new File(filepath);// 定义文件路径
if (f.exists() && f.isDirectory()) {// 判断是文件还是目录
if (f.listFiles().length == 0) {// 若目录下没有文件则直接操作
// f.delete(); 对空目录的操作
} else {// 若有则把文件放进数组,并判断是否有下级目录
File file[] = f.listFiles();
int i = f.listFiles().length;
for (int j = 0; j < i; j++) {
if (file[j].isDirectory()) {
// 对当前目录的操作
read(file[j].getAbsolutePath());// 递归调用del方法并取得子目录路径
}
// 对文件的操作/
}
}
read(filepath);// 递归调用
}
}
}
作者:
齐国峰
时间:
2011-11-6 22:01
应该改为:
public boolean accept(File dir, String name) {
File file = new File(dir,name);
if(file.isFile())
return file.getName().toLowerCase().endsWith(extName.toLowerCase());
else
return true;
}
这样的话是文件就会判断是否采用指定的扩展名结尾.
文件夹就直接返回true,再在你的主程序里递归遍历子目录应该就可以了.
作者:
周敏2011nc
时间:
2011-11-7 11:45
首先你要明白public boolean accept(File dir, String name) 的工作原理 。
该方法就像一个已经封装好了的递归方法,它只便利当前路径下的所有文件(不包含子目录下的文件),目录下有多少个文件,就会便利多少次,如果想要得到子目录下的文件吗,也就是要写一个自己的递归方法嵌套在里面,在递归中写递归,容易会现重复输出,到现在我也没解决这个问题..我的代码......
class MyListFileFilenameFilter implements FilenameFilter{
public boolean accept(File dir, String name) {
//System.out.println(2);
File[] file = dir.listFiles();
for(File filename : file){
if(filename.isDirectory()){
System.out.println(filename);
accept(filename,name);
}
else{
return filename.isFile();
}
}
return true;
}
}
用这个方法实现该功能有很多不便,自己写一个递归更简便。
作者:
喻尚健
时间:
2011-11-7 14:11
public class TestFilter {
public static void main(String[] args) {
find("d:\\java\\");
}
public static void find(String strPath) {
MyFilenameFilter filter=new MyFilenameFilter(".txt");
File dir = new File(strPath);
File[] files = dir.listFiles(filter);
if (files == null)
return;
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
find(files[i].getAbsolutePath());
}
else {
String strFileName = files[i].getAbsolutePath().toLowerCase();
System.out.println("---"+strFileName);
}
}
}
}
class MyFilenameFilter implements FilenameFilter{
private String extName=null;
public MyFilenameFilter(String extName) {
this.extName = extName;
}
public boolean accept(File dir, String name) {
File file = new File(dir,name);
if(file.isFile())
return file.getName().toLowerCase().endsWith(extName.toLowerCase());
return true;
}
}
用了你的MyFilenameFilter最后return false;改为return true;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2