package org.fastcatsearch.util;
import java.io.File;
import java.io.FileFilter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class DirectoryFileEnumerationTest {
Logger logger = LoggerFactory.getLogger(DirectoryFileEnumerationTest.class);
FileFilter fileAndDirFilter = new FileFilter(){
@Override
public boolean accept(File pathname) {
return true;
}
};
FileFilter onlyFileFilter = new FileFilter(){
@Override
public boolean accept(File pathname) {
return !pathname.isDirectory();
}
};
FileFilter onlyDirectoryFilter = new FileFilter(){
@Override
public boolean accept(File pathname) {
return pathname.isDirectory();
}
};
FileFilter testFilter = new FileFilter(){
@Override
public boolean accept(File pathname) {
return pathname.getName().startsWith("$");
}
};
@Test
public void testListAllFiles() {
String rootPath = "/Users/swsong/Documents";
File rootFile = new File(rootPath);
DirectoryFileEnumeration e = new DirectoryFileEnumeration(rootFile, onlyFileFilter);
int count = 0;
while(e.hasMoreElements()) {
count++;
File f = e.nextElement();
logger.debug("{}] {} >> {}", count, f.isDirectory() ? "<Dir>" : f.length() + "b", f.getAbsolutePath());
}
}
@Test
public void testListManyFiles() {
String rootPath = "/Volumes/fileserver";
File rootFile = new File(rootPath);
//특정시간 이후에 수정된 파일목록을 가져온다.
Calendar cal = Calendar.getInstance();
cal.set(2014, 5, 10);
final long lastTime = cal.getTimeInMillis();
FileFilter modifyTimeFilter = new FileFilter(){
@Override
public boolean accept(File pathname) {
return pathname.lastModified() > lastTime;
}
};
DirectoryFileEnumeration e = new DirectoryFileEnumeration(rootFile, modifyTimeFilter);
int count = 0;
long st = System.currentTimeMillis();
long lap = System.currentTimeMillis();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
while(e.hasMoreElements()) {
count++;
File f = e.nextElement();
logger.debug("{}] {} > {} >> {}", count, format.format(new Date(f.lastModified())), f.isDirectory() ? "<Dir>" : f.length() + "b", f.getAbsolutePath());
// logger.debug("{}", e.getDirectoryQueueSize());
if(count % 4000 == 0) {
// logger.debug("{}] {} >> {}", count, f.isDirectory() ? "<Dir>" : f.length() + "b", f.getAbsolutePath());
logger.debug("count {} > {} ms / {} ms", count, System.currentTimeMillis() - lap, System.currentTimeMillis() - st);
lap = System.currentTimeMillis();
}
}
logger.debug("Total count {} > {} ms / {} ms", count, System.currentTimeMillis() - lap, System.currentTimeMillis() - st);
}
}