Java FileNameFilter和FileFilter的用法
我正在编写一个简单的程序,以递归方式列出目录中的文件.class 最初,我将其编码为:Java FileNameFilter和FileFilter的用法,java,file,filefilter,Java,File,Filefilter,我正在编写一个简单的程序,以递归方式列出目录中的文件.class 最初,我将其编码为: public class Parsing{ public static void main(String[] args) { File f=new File(".\\"); readRecursive(f); } private static void readRecursive(File f) { String[] files=f
public class Parsing{
public static void main(String[] args) {
File f=new File(".\\");
readRecursive(f);
}
private static void readRecursive(File f) {
String[] files=f.list( new FilterByteCode());
if(null==files){
files=new String[0];
}
for(String curr: files){
File currFile=new File(curr);
System.out.println(currFile.getName());
readRecursive(currFile);
}
}
}//end parsing
class FilterByteCode implements FilenameFilter {
@Override
public boolean accept(File dir, String name) {
if(name.endsWith(".class")){
return acceptByteCode(dir);
}else{
return (null!=dir && dir.exists() && dir.isDirectory());
}
}
private boolean acceptByteCode(File dir) {
boolean res= (null!=dir && dir.exists() && dir.isFile());
return res;
}
}//FilterByteCode
但是这个列表只列出目录和子目录,而不是文件
我使用文件过滤器解决了以下问题:
private static void readRecursiveFile(File f) {
File[] files=f.listFiles(new FilterByteCode2());
if(null==files){
files=new File[0];
}
for(File curr: files){
System.out.println(curr.getName());
readRecursiveFile(curr);
}
}
class FilterByteCode2 implements FileFilter {
@Override
public boolean accept(File pathname) {
if(null!=pathname && pathname.getName().endsWith(".class")){
return acceptByteCode(pathname);
}else{
return (null!=pathname && pathname.exists() && pathname.isDirectory());
}
}//accept
private boolean acceptByteCode(File dir) {
boolean res = (null != dir && dir.exists() && dir.isFile());
return res;
}
}//FilterByteCode2
这项工作列出了file.class
我看到了FileFilter和FilenameFilter之间的差异,但我没有找到行为差异的原因。中的
dir
参数表示找到文件的父目录,而不是您所期望的文件本身。因此,在其他方法中,dir.isFile()
在FilenameFilter
方法中总是返回false
,这使得acceptByteCode()
总是返回false什么“\\\”
应该是什么意思?