Get the content of a directory with a FilterTag(s): IO
First you create a class that implements java.io.FilenameFilter and then code the accept() method. You call File.list() with the filter as a parameter. The returned array of strings has all the names that passed through the accept()filter.
import java.io.File;
import java.io.FilenameFilter;
public class Filter implements FilenameFilter {
protected String pattern;
public Filter (String str) {
pattern = str;
}
public boolean accept (File dir, String name) {
return name.toLowerCase().endsWith(pattern.toLowerCase());
}
public static void main (String args[]) {
if (args.length != 1) {
System.err.println
("usage: java Filter <pattern list> ex. java Filter java");
return;
}
Filter nf = new Filter (args[0]);
// current directory
File dir = new File (".");
String[] strs = dir.list(nf);
for (int i = 0; i < strs.length; i++) {
System.out.println (strs[i]);
}
}
}
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.Iterator;
import java.util.TreeSet;
/**
* <CODE>
* GenericFileFilter xml = new GenericFileFilter ("xml");
* // GenericFileFilter xmlandpdf = new GenericFileFilter (new String [] { "xml", "pdf" });
* File dir = new File (".");
* String[] strs = dir.list(xml);
* for (int i = 0; i < strs.length; i++) {
* // strs[i]
* }
* </CODE>
*/
public class GenericFileFilter implements FilenameFilter {
private TreeSet<String> exts = new TreeSet<String>() ;
public GenericFileFilter(String ext) {
exts.add("." + ext.toLowerCase().trim());
}
public GenericFileFilter(String[] extensions) {
Iterator<String> extList = Arrays.asList(extensions).iterator();
while (extList.hasNext()) {
exts.add("." + extList.next().toLowerCase().trim());
}
exts.remove("");
}
public boolean accept(File dir, String name) {
final Iterator<String> extList = exts.iterator();
while (extList.hasNext()) {
if (name.toLowerCase().endsWith(extList.next())) {
return true;
}
}
return false;
}
}
import java.io.File;
import java.io.FilenameFilter;
import java.util.regex.*;
public class Filter implements FilenameFilter {
public boolean accept (File dir, String name) {
return Pattern.matches(".*\\.(jpg|jpeg|gif|png|bmp)", name);
// if only one extension to check : "\\.jpg"
}
public static void main (String args[]) {
if (args.length < 1) {
System.err.println
("usage: java Filter <directory> ex. java Filter c:\\temp");
return;
}
Filter nf = new Filter();
// current directory
File dir = new File (args[0]);
String[] strs = dir.list(nf);
for (int i = 0; i < strs.length; i++) {
System.out.println (strs[i]);
}
}
}
If your need is simple then you don't need a complete class to implement a FilenameFilter. You can declare an anonymous class with this simple onle-liner.
import java.io.File;
import java.io.FilenameFilter;
...
files = dir.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".txt");
}
}
);
To retrieve only directories, a simple filter can be made.
import java.io.File;
import java.io.FileFilter;
public class Test {
public static void main(String[] args) throws Exception {
File [] foldersToBeChecked =
new File("J:\\").listFiles
(new FileFilter() {
public boolean accept(File pathname) {
return (pathname.isDirectory());
}
}
);
for(File f : foldersToBeChecked) {
System.out.println(f);
}
}
}
mail_outline
Send comment, question or suggestion to howto@rgagnon.com
Send comment, question or suggestion to howto@rgagnon.com