我正在实现一个ZipComparison
文件,该文件遍历目录树结构,并处理该目录树结构中所有MD5
个文件的.zip
。
import java.io.*;
public class ZipComparison {
public class ZipFilenameFilter implements FilenameFilter {
public boolean accept(File dir, String name) {
if( name != null &&
( dir.isDirectory() || name.toLowerCase().endsWith(".zip"))) {
return true;
}
return false;
}
}
/**
* These two constant values are the root for the directory
*/
private static final String root_a = "D:/UDU/r/tc10.0.0.2012080100_A";
private static final String root_b = "D:/UDU/r/tc10.0.0.2012080100_B";
private ZipFilenameFilter filter;
public ZipComparison() {
this.filter = new ZipFilenameFilter();
}
public void matchMD5() {
try{
File root = new File( ZipComparison.root_a );
if( !root.exists() ){
System.out.println( "root doesn't exist" );
}
else if( !root.isDirectory() ) {
System.out.println( "root isn't a directory" );
}
else{
File[] files = new File( ZipComparison.root_a ).listFiles( this.filter );
if( files != null ){
showFiles( files );
}
else{
System.out.println( "List of files was null." );
System.exit( -1 );
}
}
}
catch(SecurityException ex){
ex.printStackTrace();
}
}
/**
* iterates over the directory tree structure.
* @param files
*/
public void showFiles( File[] files ){
for( File file : files ){
if( file.isDirectory() ) {
System.out.println( "Directory: " + file.getName() );
showFiles( file.listFiles( this.filter ) );
}
else {
System.out.println( "File: " + file.getName() );
}
}
}
/**
* @param args
*/
public static void main( String[] args ) {
// TODO Auto-generated method stub
ZipComparison zc = new ZipComparison();
zc.matchMD5();
System.exit( 0 );
}
}
当我在没有ZipFilenameFilter filter
的情况下执行程序时,它的工作正常。但是,当我将filter
添加到
File[] files = new File( ZipComparison.root_a ).listFiles( filter );
什么都没打印出来。我错过了什么吗?
答案 0 :(得分:3)
你是搜索递归但是错误地过滤了dir。 尝试
if( name != null &&(name.isDirectory()||
name.toLowerCase().endsWith(".zip")))
答案 1 :(得分:2)
您过滤的listFiles
来电将仅列出 个zip文件。它将排除子目录,因此您只能看到直接位于根目录内的zip文件,而不是那些位于树下深处的zip文件。您可能希望FileFilter
接受所有目录,以及任何名称以.zip
结尾的非目录。
答案 2 :(得分:1)
两个主要问题:
过滤器:
public boolean accept(File dir, String name) {
if (name == null) {
return false;
}
return new File(dir, name).isDirectory() || name.toLowerCase().endsWith(".zip");
}
递归函数(假设类变量zip过滤器):
public void showFiles(File[] files) {
for (File file : files) {
if (file.isDirectory()) {
System.out.println("Directory: " + file.getName());
showFiles(file.listFiles(zipFilenameFilter));
} else {
System.out.println("File: " + file.getName());
}
}
}