我们在开发中,经常需要遍历一个目录下的所有文件,常用的办法就是使用一个函数递归遍历是常用的办法。例如:
public static void iterateFile(File file) {
if (file.isDirectory()) {
if (file.getName().startsWith(".")) return;
for (File item : file.listFiles()) {
iterateFile(item);
}
return;
}
// do something}
但是递归函数的缺点就是扩展不方便,当然你对这个函数加入一个参数FileHandler,这样扩展性稍好一些,但是仍然不够好,比如说,不能根据遍历的 需要中途停止遍历,加入Filter等等。我实现了一个FileIterator,使得遍历一个目录下的文件如何遍历一个集合中的元素一般操作。
废话少说,代码如下:
package net.wenshao;
填写下面表单即可预约申请免费试听java课程!害怕学不会?助教陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
import java.io.File;
import java.util.Iterator;
import java.util.NoSuchElementException;
public class FileIterator implements Iterator
private static class State {
final State parent;
final File[] files;
int index = 0;
public State(State parent, File dir) {
this.parent = parent;
files = dir.listFiles();
}
}
private File current;
private State state;
public FileIterator(File file) {
if (file.isDirectory()) {
state = new State(null, file);
nextInternal();
} else {
this.current = file;
state = null;
}
}
@Override
public boolean hasNext() {
return current != null;
}
@Override
public File next() {
File rtValue = current;
if (rtValue == null) throw new NoSuchElementException();
nextInternal();
return rtValue;
}
private void nextInternal() {
current = null;
if (this.state == null) return;
for (;;) {
if (state.index >= state.files.length) {
state = state.parent;
if (state == null) return;
state.index++;
continue;
}
File file = state.files[state.index];
// 可以在此处加入Filters处理代码
if (file.isDirectory()) {
state = new State(state, file);
continue;
}
current = file;
state.index++;
break;
}
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
}
使用FileIterator的例子:
File dir = new File("/home/wenshao/workspace");
Iterator
while (iter.hasNext()) {
File file = iter.next();
System.out.println(file.getPath());
}
上一篇:深入理解抽象类和接口
下一篇: 没有了
一级建造师二级建造师消防工程师造价工程师土建职称房地产经纪人公路检测工程师建筑八大员注册建筑师二级造价师监理工程师咨询工程师房地产估价师 城乡规划师结构工程师岩土工程师安全工程师设备监理师环境影响评价土地登记代理公路造价师公路监理师化工工程师暖通工程师给排水工程师计量工程师
执业药师执业医师卫生资格考试卫生高级职称护士资格证初级护师主管护师住院医师临床执业医师临床助理医师中医执业医师中医助理医师中西医医师中西医助理口腔执业医师口腔助理医师公共卫生医师公卫助理医师实践技能内科主治医师外科主治医师中医内科主治儿科主治医师妇产科医师西药士/师中药士/师临床检验技师临床医学理论中医理论