例:遍历windows下的所有后缀为.ini的文件
方法1:
public class Test {
public static void main(String[] args) {
File file = new File("c:/windows");
show(file);
}
public static void show(File file) {
if (file.isDirectory()) {
File[] children = file.listFiles();
if (children != null && children.length > 0) {
for (File tmp : children)
show(tmp);
}
} else if (file.isFile()) {
String fileName = file.getName();
if (fileName != null && fileName.length() > 0) {
int pos = fileName.lastIndexOf("."); // 查找"."出现的索引,如果没有出现,返回-1
if (pos > 0) {
String fileExt = fileName.substring(pos); // 从下标为pos的位置开始截取到最后的值
if (fileExt != null && fileExt.length() > 0) {
if (".ini".equals(fileExt))
System.out.println(fileName);
}
}
}
}
}
}
方法2:过滤器接口FilenameFilter & FileFilter
public class Test2 {
public static void main(String[] args) {
File file = new File("c:/windows");
show(file);
}
public static void show(File file) {
if (file.isDirectory()) {
File[] children = file.listFiles(new FilenameFilter() { // 匿名内部类
@Override
public boolean accept(File dir, String name) {
// dir是上层目录,name是需要判断的目录或者文件
File tmp = new File(dir, name);
if (tmp.isFile())
return name.endsWith(".ini");
else
return true;
}
});
if (children != null && children.length > 0) {
for (File tmp : children)
show(tmp);
}
} else if (file.isFile()) {
System.out.println(file.getName());
}
}
}
public class Test3 {
public static void main(String[] args) {
File file = new File("c:/windows");
show(file);
}
public static void show(File file) {
if (file.isDirectory()) {
File[] children = file.listFiles(new FileFilter() { //匿名内部类
//两个Filter功能类似,只是回调方法的参数不一样,FileFilter比FilenameFilter简单一些,编程方便
public boolean accept(File pathname) {
if(pathname.isDirectory())
return true;
else if(pathname.isFile()){
String fileName = pathname.getName();
if(fileName.endsWith(".ini"))
return true;
}
return false;
}
});
if (children != null && children.length > 0) {
for (File tmp : children)
show(tmp);
}
} else if (file.isFile()) {
System.out.println(file.getName()+"\t"+file.length());
}
}
}