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 件のコメント:
コメントを投稿