• java扫描文件夹下面的所有文件(递归与非递归实现)


    java中扫描指定文件夹下面的所有文件
    扫描一个文件夹下面的所有文件,因为文件夹的层数没有限制可能多达几十层几百层,通常会采用两种方式来遍历指定文件夹下面的所有文件。
    递归方式
    非递归方式(采用队列或者栈实现)
    下面我就给出两种方式的实现代码,包括了递归与非递归实现,code如下所示。

    package q.test.filescanner;

    import java.io.File;
    import java.util.ArrayList;
    import java.util.LinkedList;

    import q.test.filescanner.exception.ScanFilesException;

    /**
    * @author 邪恶小先生
    */
    public class FolderFileScanner {

    private static ArrayList<Object> scanFiles = new ArrayList<Object>();

    /**linkedList实现**/
    private static LinkedList<File> queueFiles = new LinkedList<File>();


    /**
    * TODO:递归扫描指定文件夹下面的指定文件
    * @return ArrayList<Object>
    * @author 邪恶小先生(LQ)
    * @time 2017年11月3日
    */
    public static ArrayList<Object> scanFilesWithRecursion(String folderPath) throws ScanFilesException{
    ArrayList<String> dirctorys = new ArrayList<String>();
    File directory = new File(folderPath);
    if(!directory.isDirectory()){
    throw new ScanFilesException('"' + folderPath + '"' + " input path is not a Directory , please input the right path of the Directory. ^_^...^_^");
    }
    if(directory.isDirectory()){
    File [] filelist = directory.listFiles();
    for(int i = 0; i < filelist.length; i ++){
    /**如果当前是文件夹,进入递归扫描文件夹**/
    if(filelist[i].isDirectory()){
    dirctorys.add(filelist[i].getAbsolutePath());
    /**递归扫描下面的文件夹**/
    scanFilesWithRecursion(filelist[i].getAbsolutePath());
    }
    /**非文件夹**/
    else{
    scanFiles.add(filelist[i].getAbsolutePath());
    }
    }
    }
    return scanFiles;
    }

    /**
    *
    * TODO:非递归方式扫描指定文件夹下面的所有文件
    * @return ArrayList<Object>
    * @param folderPath 需要进行文件扫描的文件夹路径
    * @author 邪恶小先生(LQ)
    * @time 2017年11月3日
    */
    public static ArrayList<Object> scanFilesWithNoRecursion(String folderPath) throws ScanFilesException{
    File directory = new File(folderPath);
    if(!directory.isDirectory()){
    throw new ScanFilesException('"' + folderPath + '"' + " input path is not a Directory , please input the right path of the Directory. ^_^...^_^");
    }
    else{
    //首先将第一层目录扫描一遍
    File [] files = directory.listFiles();
    //遍历扫出的文件数组,如果是文件夹,将其放入到linkedList中稍后处理
    for(int i = 0; i < files.length; i ++){
    if(files[i].isDirectory()){
    queueFiles.add(files[i]);
    }else{
    //暂时将文件名放入scanFiles中
    scanFiles.add(files[i].getAbsolutePath());
    }
    }

    //如果linkedList非空遍历linkedList
    while(!queueFiles.isEmpty()){
    //移出linkedList中的第一个
    File headDirectory = queueFiles.removeFirst();
    File [] currentFiles = headDirectory.listFiles();
    for(int j = 0; j < currentFiles.length; j ++){
    if(currentFiles[j].isDirectory()){
    //如果仍然是文件夹,将其放入linkedList中
    queueFiles.add(currentFiles[j]);
    }else{
    scanFiles.add(currentFiles[j].getAbsolutePath());
    }
    }
    }
    }

    return scanFiles;
    }
    }

  • 相关阅读:
    Razor 视图
    可选参数和命名参数
    CPU性能分析工具原理
    从硬件到语言,详解C++的内存对齐(memory alignment)
    谈谈C++的volatile关键字以及常见的误解
    C++11的value category(值类别)以及move semantics(移动语义)
    C++基于范围循环(range-based for loop)的陷阱
    C++模板入门教程(一)——模板概念与基本语法
    自己动手实现深度学习框架-8 RNN文本分类和文本生成模型
    自己动手实现深度学习框架-7 RNN层--GRU, LSTM
  • 原文地址:https://www.cnblogs.com/jxldjsn/p/9940157.html
Copyright © 2020-2023  润新知