华南俳烁实业有限公司

java

當(dāng)前位置:中華考試網(wǎng) >> java >> java基礎(chǔ) >> 文章內(nèi)容

一個FileIterator的實現(xiàn)

來源:中華考試網(wǎng)  [2020年11月30日]  【

  我們在開發(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è)!

java課程免費學(xué)習(xí),高薪觸手可得

  • 地區(qū):
  • 姓名:
  • 手機(jī):

  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 iter = new FileIterator(dir);

  while (iter.hasNext()) {

  File file = iter.next();

  System.out.println(file.getPath());

  }

責(zé)編:fushihao

上一篇:深入理解抽象類和接口

下一篇: 沒有了

  • 會計考試
  • 建筑工程
  • 職業(yè)資格
  • 醫(yī)藥考試
  • 外語考試
  • 學(xué)歷考試
龙州县| 崇明县| 长宁区| 会东县| 米泉市| 偏关县| 克山县| 松溪县| 夏津县| 沙河市| 葫芦岛市| 金湖县| 江华| 年辖:市辖区| 巍山| 台山市| 房山区| 读书| 定南县| 巴林左旗| 云龙县| 方城县| 西畴县| 海林市| 汉沽区| 娄底市| 扶风县| 泗阳县| 闽侯县| 普兰店市| 新野县| 连州市| 蓬安县| 同江市| 盐池县| 平南县| 登封市| 红桥区| 宝丰县| 衡水市| 桐柏县|