`

用递归列出和删除文件的所有目录

    博客分类:
  • java
阅读更多

递归(Recursion),就是方法调用自身。

对于递归来说,一定有一个出口,让递归结束,只有这样才能保证不出现死循环。

 

递归计数器:

private static int time;

public static void recursion()

{

        time++;

        recursion();

        time--;

}

 

个简单的递归实例:阶乘

 

public static int factorial(int number)
{
        int result;                        
        if(number == 1)             //递归出口
         {
                result = 1;
         }
        else
        {
                result = number * factorial(number - 1);
        }
        return result;
}

 

删除当前目录及其子目录下所有文件和目录

 

public static void deleteAll(File file)

{

        if(file.isFile() || file.list().length == 0)   //递归出口
        {
                file.delete();
        }
        else
        {
             File[] files = file.listFiles();
            for(File f : files)
                {
                        deleteAll(f);
                        f.delete();          //删除最后的空目录
                }

        }

}

 

列出当前目录及子目录的所有文件及目录

 

/*粗略的版本*/
public static void listAll(File file)
{
          //递归出口,file为文件或空目录时打印出filename
        if(file.isFile() || file.list().length == 0)    
        {
            System.out.println(file.getName());
        }
        else
        {
               //先打印父目录
                System.out.println(file.getName());

                File[] files = file.listFiles();
                for(File f : files)
                {
                            listAll(f);
                }
        }
}

 

/*带Tab格式的排序的版本*/
//用于判断目录或文件所处的层次
private static int time;

public static void listAll(File file)
{
        if(file.isFile() || file.list().length == 0)
        {
                System.out.println(getTabs(time) + file.getName() + (file.isFile() ? "" : "\\"));
        }
        else
        {
                System.out.println(getTabs(time) + file.getName() + "\\");

                File[] files = file.listFiles();
                sort(files);
            for(File f : files)
                {
                        time++;
                        listAll(f);
                        time--;
                }
        }
}
//判断需要加多少 tab的方法
private static String getTabs(int time)
{
        StringBuffer buffer = new StringBuffer();
      for(int i = 0; i < time; i++)
{
        buffer.append("\t");
}
    return buffer.toString();
}
// 整理文件,使得目录排在文件之前
private static void sort(File[] files)
{
        ArrayList<File> sorted = new ArrayList<File>();
        // 寻找到所有的目录
        for (File f : files)
        {
                if (f.isDirectory())
                 {
                        sorted.add(f);
                }
        }
    // 寻找到所有的文件
        for (File f : files)
        {
            if (f.isFile())
                {
                        sorted.add(f);
                }
        }
       files = sorted.toArray(new File[files.length]);
}

 

 

 

 

分享到:
评论

相关推荐

    非递归删除非空目录(源代码)

    这段代码首先列出目录`Test`中的所有文件和子目录,然后逐个处理。对于每个子项,如果是文件则直接删除,如果是子目录则递归调用`RemoveNonEmptyDirectory`。所有子项处理完毕后,尝试删除`Test`目录自身。 这样的...

    3、HDFS的使用(读写、上传、下载、遍历、查找文件、整个目录拷贝、只拷贝文件、列出文件夹下文件、删除文件及目录、获取文件及文件

    - **文件删除**:调用`boolean delete(Path p, boolean recursive)`,其中`recursive`参数决定是否递归删除目录。 - **文件遍历**:使用`FileStatus[] listStatus(Path f)`获取目录下所有文件的状态,再遍历这些状态...

    linux下为目录和文件设置权限,包括子目录的循环递归设置

    - **读 (r)**:允许查看文件内容或列出目录内容。 - **写 (w)**:允许修改文件内容或创建/删除目录中的文件。 - **执行 (x)**:允许执行文件作为程序,或进入目录。 每种文件类型(普通文件、目录和特殊文件)对于...

    1 列出/etc目录下的所有文件名称 2 创建文件file1 和file2 并复制到/home目录下 3 显示以ma

    1. 列出`/etc`目录下的所有文件名称:使用`ls -a /etc`命令,其中`-a`选项表示显示隐藏文件。 2. 创建文件`file1`和`file2`并复制到`/home`目录下:首先创建文件,`touch /home/file1 /home/file2`,然后复制,`cp ...

    C#删除FTP文件夹(有子文件夹和子文件)的方法

    通过使用`FtpWebRequest`类并结合递归算法,可以有效地解决删除包含子文件夹和文件的FTP目录问题。这种方法不仅适用于C#,也适用于其他.NET语言。 通过以上步骤,我们可以高效且准确地完成FTP目录的删除工作。需要...

    python实现MP4文件递归查找功能

    os模块提供了许多与操作系统相关的函数,包括列出目录、创建删除文件或目录等。在这个案例中,我们主要使用`os.walk()`函数,它可以生成目录树中的文件名。 ```python import os def find_mp4_files(path): file_...

    ExcelVBA列出指定目录及子目录文件

    我们可以递归地遍历每个子目录,直到所有文件都被列出。例如: ```vba Sub ListFilesInDirectory(ByVal folderPath As String) Dim folder As Folder Dim subFolder As Folder Dim file As File Set folder ...

    qt删除文件夹内所有内容

    默认情况下,`QDir`会列出所有内容(包括文件和目录)。要删除文件和子目录,不需要进行此步。 3. **列举目录内容**:调用`entryList()`方法获取目录内的文件和子目录列表。例如: ```cpp QStringList entries = ...

    forfiles 批处理删除文件

    - `dir /ad/b/s d:\test\`:列出 `d:\test` 目录及其子目录下的所有空目录。 - `sort /r`:按逆序排序目录列表。 - `&gt;d:\kill.txt`:将结果保存到文本文件。 - `For /f "tokens=*" %%i in (d:\kill.txt) DO rd "%%i...

    易语言循环删除文件

    这里要注意,删除操作通常是不可逆的,所以在实际应用中要谨慎处理,可以添加确认提示或者只列出待删除文件,供用户确认。 4. **错误处理**:在循环过程中,可能会遇到权限问题、文件被占用等情况导致无法删除。...

    linux rm 命令(删除文件和目录) 使用详解.docx

    * -r, -R, --recursive 指示 rm 将参数中列出的全部目录和子目录均递归地删除。 * -v, --verbose 详细显示进行的步骤 * --help 显示此帮助信息并退出 * --version 输出版本信息并退出 实例一:删除文件 file,系统...

    c++遍历文件夹及其子文件夹所有文件 并输出文件路径和文件内容

    这个程序不仅遍历了指定目录下的所有文件,还递归地处理了子目录。同时,它还输出了每个文件的完整路径和内容。如果你需要在其他操作系统(如Linux或MacOS)上运行,只需确保你的编译器支持`std::filesystem`库,...

    文件过滤,递归,删除/清理绝育后工程产生的debug信息

    - 在Windows中,`del /s` 命令可以递归删除指定目录下的文件,而`dir /b /s` 可以列出所有文件。 - 在Linux或macOS中,`find . -name "*.pdb" -delete` 可以找到当前目录下所有`.pdb`文件并删除。 - 使用Git时,...

    PHP使用递归方式列出当前目录下所有文件的方法

    本文将深入讲解如何使用PHP递归列出当前目录下所有文件的方法。 首先,我们定义一个名为`filelist`的函数,它接受两个参数:`$pathname`表示要列出文件的目录路径,`$i`则用来控制缩进级别,以便在输出时展示文件的...

    DOS下进行文件批量删除

    在给定的部分内容中,我们可以看到一个完整的批处理脚本示例,它首先通过`@ECHO off`和`cls`命令准备执行环境,然后列出了多个要删除的文件,并使用了`del`命令的不同参数组合来实现批量删除。最后,通过`ping`和`...

    Python-dedoop递归删除重复目录并将其内容写入新目录同时记住旧的路径

    `os`模块提供了许多与操作系统交互的功能,包括列出目录内容、创建和删除目录等;`shutil`模块则提供了高级的文件和文件集合操作,例如复制和移动文件。 递归在处理目录结构时是必不可少的,因为文件系统通常具有...

    删除临时文件C++实现

    同时,为了防止误删重要文件,可以考虑在删除前询问用户确认,或者只列出待删除文件供用户审查。 以上就是使用C++实现删除临时文件的基本步骤。`deleteTempFile.cpp`和`deleteTempFile.h`文件分别包含了这个功能的...

    Linux文件和目录操作命令

    - **rm**:删除文件或目录。 - `rm file_name`:删除名为file_name的文件。 - `rm -r directory_name`:递归删除目录及其内容,需要用户确认。 - `rm -rf directory_name`:强制递归删除目录及其内容,不会询问...

    linux常用命令,有创建,删除,查看文件或目录等

    - `ls`:列出当前目录下的文件和子目录。 - `ls -l`:以长格式列出目录内容。 - `ls -a`:显示隐藏文件(文件名以`.`开头)。 - **查看文件内容**: - `cat filename`:查看文件内容。 - `less filename`:分页...

Global site tag (gtag.js) - Google Analytics