package org.tanuneko.tanukin;
import org.apache.commons.io.DirectoryWalker;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.stream.Collectors;
public class DirWalker extends DirectoryWalker<File> {
private static FileFilter filter = getFilter();
public DirWalker() {
super( filter,-1 );
}
protected void handleFile( File file, int depth, Collection<File> results ) {
results.add( file );
}
public Collection<File> start( File startDir ) throws IOException {
Collection<File> results = new ConcurrentLinkedQueue<File>();
super.walk( startDir, results );
return results;
}
public static void main(String args[] ) throws IOException {
DirWalker walker = new DirWalker();
System.out.println(
walker.start(new File("C:\\cygwin\\srv")).parallelStream()
.map(x -> x.getAbsolutePath())
.collect(Collectors.toStringJoiner("\n"))
.toString());
}
// if you want to handle directory, define below
/*
protected boolean handleDirectory( File dir, int depth, Collection<File> results ) {
if( ".svn".equals( dir.getName() ) ) {
return false;
}
else {
return true;
}
}
*/
private static FileFilter getFilter() {
// you can define filter
// IOFileFilter suffixFilt = FileFilterUtils.suffixFileFilter( ".txt" );
// FileFilterUtils.makeSVNAware( suffixFilt );
// FileFilter filter = FileFilterUtils.or( suffixFilt );
// return filter;
return null;
}
}
水曜日, 1月 15, 2014
Java8 - streamとDirectoryWalkerで効率よくファイル探索
Java IO CommonsのDirectoryWalkerとstreamを組み合わせて,効率よくファイルシステム上のデータを探すコード.かなり荒削りのサンプルだが,とりあえず動く.
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿