我們在開發(fā)中,經(jīng)常需要遍歷一個目錄下的所有文件,常用的辦法就是使用一個函數(shù)遞歸遍歷是常用的辦法。例如:
public static void iterateFile(File file) {
if (file.isDirectory()) {
if (file.getName().startsWith(".")) return;
for (File item : file.listFiles()) {
iterateFile(item);
}
return;
}
// do something}
但是遞歸函數(shù)的缺點就是擴(kuò)展不方便,當(dāng)然你對這個函數(shù)加入一個參數(shù)FileHandler,這樣擴(kuò)展性稍好一些,但是仍然不夠好,比如說,不能根據(jù)遍歷的 需要中途停止遍歷,加入Filter等等。我實現(xiàn)了一個FileIterator,使得遍歷一個目錄下的文件如何遍歷一個集合中的元素一般操作。
廢話少說,代碼如下:
package net.wenshao;
填寫下面表單即可預(yù)約申請免費試聽java課程!害怕學(xué)不會?助教陪讀,隨時解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可全國推薦就業(yè)!
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());
}
上一篇:深入理解抽象類和接口
下一篇: 沒有了
初級會計職稱中級會計職稱經(jīng)濟(jì)師注冊會計師證券從業(yè)銀行從業(yè)會計實操統(tǒng)計師審計師高級會計師基金從業(yè)資格稅務(wù)師資產(chǎn)評估師國際內(nèi)審師ACCA/CAT價格鑒證師統(tǒng)計資格從業(yè)
一級建造師二級建造師消防工程師造價工程師土建職稱房地產(chǎn)經(jīng)紀(jì)人公路檢測工程師建筑八大員注冊建筑師二級造價師監(jiān)理工程師咨詢工程師房地產(chǎn)估價師 城鄉(xiāng)規(guī)劃師結(jié)構(gòu)工程師巖土工程師安全工程師設(shè)備監(jiān)理師環(huán)境影響評價土地登記代理公路造價師公路監(jiān)理師化工工程師暖通工程師給排水工程師計量工程師
人力資源考試教師資格考試出版專業(yè)資格健康管理師導(dǎo)游考試社會工作者司法考試職稱計算機(jī)營養(yǎng)師心理咨詢師育嬰師事業(yè)單位教師招聘公務(wù)員公選考試招警考試選調(diào)生村官
執(zhí)業(yè)藥師執(zhí)業(yè)醫(yī)師衛(wèi)生資格考試衛(wèi)生高級職稱護(hù)士資格證初級護(hù)師主管護(hù)師住院醫(yī)師臨床執(zhí)業(yè)醫(yī)師臨床助理醫(yī)師中醫(yī)執(zhí)業(yè)醫(yī)師中醫(yī)助理醫(yī)師中西醫(yī)醫(yī)師中西醫(yī)助理口腔執(zhí)業(yè)醫(yī)師口腔助理醫(yī)師公共衛(wèi)生醫(yī)師公衛(wèi)助理醫(yī)師實踐技能內(nèi)科主治醫(yī)師外科主治醫(yī)師中醫(yī)內(nèi)科主治兒科主治醫(yī)師婦產(chǎn)科醫(yī)師西藥士/師中藥士/師臨床檢驗技師臨床醫(yī)學(xué)理論中醫(yī)理論