面试题求解: 列举文件或者文件夹

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 15:44   41   0

有人问及一个用java列举某个文件夹下所有的文件或者目录编程题。结果他不加思索的写了十几行代码,就搞定了,结果面试官说等通知,直到最后都没通知他,我猜想出题人的最终想法是看如何封装代码,如何灵活使用丰富的API。

/*
 * @(#)FileEnumerator.java    June 11, 2010
 *
 * Copyright 2009 ... Shanghai, Inc. All rights reserved.
 */

package com.lab.basic;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * List all directory or file.
 *
 * @author nick...@gmail.com
 * @version May 19, 2010 3:22:48 PM
 */
public class FileEnumerator {

 private File file;

 public enum Type {
  ALL, DIRECTORY, FILE;
 };

 private List<File> fileList = new ArrayList<File>();

 public FileEnumerator(File file) {
  this.file = file;
 }

 public List<File> listFile() {
  return listFile(Type.ALL);
 }

 public List<File> listFile(Type type) {
  fileList
    .addAll(Arrays.asList(file.listFiles(new FileTypeFilter(type))));

  return fileList;
 }

 private class FileTypeFilter implements FileFilter {

  private Type type;

  private FileTypeFilter(Type type) {
   this.type = type;
  }

  public boolean accept(File file) {
   deepLoop(file);

   if (type.equals(Type.ALL)) {
    return true;
   }

   if (type.equals(Type.DIRECTORY)) {
    return file.isDirectory();
   }

   return file.isFile();
  }

  private void deepLoop(File file) {
   if (file.isDirectory()) {
    fileList.addAll(Arrays.asList(file
      .listFiles(new FileTypeFilter(type))));
   }
  }
 }
}

原帖地址: http://lavasoft.blog.51cto.com/62575/286787

–end–

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP