我正在尝试将 SD 卡/内部存储中的所有 zip 文件显示为列表视图。我只想显示 zip 文件,而不是任何文件夹/子文件夹。
我尝试了一些代码,但它显示了包含 zip 文件的所有文件夹,而不是单个文件。我不想显示任何文件夹,只是文件。
我怎样才能做到这一点?
ZipFilter.java:
class ZipFilter implements FileFilter {
protected static final String TAG = "AudioFileFilter";
/**
* allows Directories
*/
private final boolean allowDirectories;
public ZipFilter(boolean allowDirectories) {
this.allowDirectories = allowDirectories;
}
public ZipFilter() {
this(true);
}
@Override
public boolean accept(File f) {
if ( f.isHidden() || !f.canRead() ) {
return false;
}
if ( f.isDirectory() ) {
return checkDirectory( f );
}
return checkFileExtension( f );
}
private boolean checkFileExtension( File f ) {
String ext = getFileExtension(f);
if ( ext == null) return false;
try {
if ( SupportedFileFormat.valueOf(ext.toUpperCase()) != null ) {
return true;
}
} catch(IllegalArgumentException e) {
//Not known enum value
return false;
}
return false;
}
private boolean checkDirectory( File dir ) {
if ( !allowDirectories ) {
return false;
} else {
final ArrayList<File> subDirs = new ArrayList<>();
int songNumb = dir.listFiles( new FileFilter()
{
@Override
public boolean accept(File file) {
if ( file.isFile() ) {
if ( file.getName().equals( ".nomedia" ) )
return false;
return checkFileExtension( file );
} else if ( file.isDirectory() ){
subDirs.add( file );
return false;
} else
return false;
}
} ).length;
if ( songNumb > 0 ) {
Log.i(TAG, "checkDirectory: dir " + dir.toString() + " return true con songNumb -> " + songNumb );
return true;
}
for( File subDir: subDirs ) {
if ( checkDirectory( subDir ) ) {
Log.i(TAG, "checkDirectory [for]: subDir " + subDir.toString() + " return true" );
return true;
}
}
return false;
}
}
}
}