- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在编写一个简单的程序,以递归方式列出目录中的文件 .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.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
但是这里只列出了目录和子目录,没有列出文件!
我使用 FileFilter 解决了:
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
这项工作列出了文件 .class。
我阅读了 FileFilter 和 FilenameFilter 之间的区别,但我没有找到行为差异的原因。
最佳答案
FilenameFilter#accept()
中的 dir
参数表示找到文件的父目录,而不是您所期望的文件本身。因此,在您的 FilenameFilter
方法中,dir.isFile()
将始终返回 false
,这使得 acceptByteCode()
将始终返回 false
。
关于java - FileNameFilter 和 FileFilter 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8327131/
这是我的FilenameFilter,它应该只允许以.docx 结尾的目录和文件。然而,由于某种原因,它现在允许每个文件,无论其结尾如何或是否是目录。一旦我删除 || dir.isDirectory(
我正在使用 FilenameFilter 类列出目录中具有特定扩展名的所有文件。但我还想列出该目录中的所有目录。我通过互联网搜索,只发现如何使用 FilenameFilter 进行多个扩展。但是我怎样
我有一个方法,在调用时将 FilenameFilter 传递给(作为匿名内部类)。现在,如果设置了变量,我想扩展FilenameFilter。示例: new FilenameFilter() {
我有这个类实现了 FilenameFilter package Logic; import java.io.File; import java.io.FilenameFilter; public
我正在尝试使用 FilenameFilter 来过滤文件以 grep 文件在目录中。 % ls -1 DirFilter.class DirList.class DirList.java doctor
这是我的文件在目录中的样子 Brake_20130901.xml Tire_20130902.xml Wheel_20130903.xml Brake_20130910.xml Brake_20131
我有一个包含 xml 文件的目录: 20140110-093721565_TOTO.xml 20140110-093821565_TATA.xml 20140110-094021565_TOTO
我正在使用一个小型 Java 工具来根据一组文件扩展名获取一组文件,我在使用 listFiles() 和使用 continue; 之间争论不休,当我遇到一个错误的文件时,与使用自定义 FileFilt
我需要扫描文件夹并过滤与特定正则表达式模式匹配的文件。 FileNameFilter 的 accept 方法中的示例代码 Scanner fileNameScanner = new Scanner(f
如何过滤多个扩展名,FileNameFilter 一次只允许一个字符串.. FileNameFilter API // filter extension, but only allow filter
我正在编写一个简单的程序,以递归方式列出目录中的文件 .class。 最初我这样编码: public class Parsing{ public static void main(String
当我尝试使用方法 someFile.listFiles(FileFilter foobar) 时,出现错误 The method listFiles(FilenameFilter) in the ty
我正在实现一个 ZipComparison 文件,它遍历目录树结构,并处理以下目录中所有 .zip 文件的 MD5该目录树结构。 import java.io.*; public class ZipC
FilenameFilter有一个 accept我可以实现告诉系统我想如何过滤文件的方法。我想实现类似的东西。这是我的场景: 我正在编写一个在 iText 之上运行的通用 API添加 Barcode到
我正在研究 java 8 中的 lambda 表达式 当我更改线程代码时它工作正常 new Thread(new Runnable() { @Override public void
美好的一天。 我想知道java.io.File.listFiles(FilenameFilter filter)是否返回一个已经排序的对象。 这是我的代码: String[] files = FIUt
假设我的测试有以下目录结构。 test | | ---test1 | | ---test2 | | ---random.txt 在此结构中,test1和test2是目录,而random.txt是常规文
所以我有以下代码: File txtFileDir = new File(MAIN_DIR + "test"); FilenameFilter filter = new FilenameFilter(
我是一名优秀的程序员,十分优秀!