Java递归遍历文件夹、写纯文本文件代码详解

一、递归遍历文件夹代码详解

package com.wzy.file_;

import java.io.File;

/**
 * 递归遍历给定文件夹,寻找指定文件名文件。
 * 如果有该文件,控制台输出文件数目和路径。
 */
public class RecursionFolder {
    static File folder = new File("/Users/wangziyi/Documents/Word");// 指定需要遍历的文件夹
    static String fileName = "就地过年.docx";// 指定目标文件名
    static int num = 0;

    public static void main(String[] args) {
        if (!folder.isDirectory()) {
            // 如果不是目录,则给出提示
            System.out.println("请检查给定的文件夹目录是否正确。");
        } else {
            // 如果是目录,则取出该目录下所有的文件,组成一个文件数组
            File[] files = folder.listFiles();
            for (File f : files) {
                getFile(f, fileName);
            }
        }
    }

	/**
     * 递归获取当前文件夹中的文件
     * @param f        目录中的文件
     * @param fileName 需要寻找的文件名
     */
    private static void getFile(File f, String fileName) {
        // 如果还存在子目录,继续读取子目录下的文件
        if (f.isDirectory()) {
            File[] subFiles = f.listFiles();
            for (File file : subFiles) {
                getFile(file, fileName);// 递归寻找指定文件
            }
        // 不存在子目录,则判断文件名是否相同
        } else {
            // 判断当前文件的名字是否和需要寻找的文件名相同
            if (f.getName().equals(fileName)) {
                // 输出文件名
                System.out.println("=====找到指定的文件:");
                System.out.println(f.getName());
                // 操作文件数量和路径
                getData(f);
            }
        }
    }

    /**
     * 操作文件数量和打印文件路径
     * @param f 当前操作的文件
     */
    private static void getData(File f) {
        num++;
        System.out.println("=====路径为:");
        System.out.println(f.getPath());
    }
}

结果如下:
递归遍历文件夹

二、写纯文本文件(Mac的文本编辑)代码详解

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

/**
 * 递归遍历给定文件夹,寻找指定文件名和文件类型文件。
 * 结果新建TXT文件写入该文件夹中。
 * 输出结果为给定文件类型文件的文件名和数量、给定文件名文件的路径。
 */
public class WriteTXTFile {
    static File folder = new File("/Users/wangziyi/Documents/Word");
    static FileWriter fileWriter = null;// 该类按字符向流中写入数据
    static String fileName = "T111.java";// 文件名
    static String fileType = ".java";// 文件类型
    static int num1 = 0;// 文件名匹配数量
    static int num2 = 0;// 文件类型匹配数量

    public static void main(String[] args) {
        try {
            fileWriter = new FileWriter(folder.getPath() + "/" + "Summary.txt");// 新建文件
            if (!folder.isDirectory()) {
                // 如果不是目录,则给出提示
                System.out.println("请检查给定的文件夹目录是否正确。");
            } else {
                File[] files = folder.listFiles();
                for (File f : files) {
                    getFile(f, fileName, fileType);
                }
            }
            // 文件名
            if (num1 == 0) {
                fileWriter.write("不存在" + fileName + "文件" + "\r\n");
            } else {
                fileWriter.write(fileName + "文件数量为:" + num1 + "\r\n");
            }
            // 文件类型
            if (num2 == 0) {
                fileWriter.write("不存在" + fileType + "类型文件" + "\r\n");
            } else {
                fileWriter.write(fileType + "文件数量为:" + num2 + "\r\n");
            }
            // 关闭流操作
            fileWriter.flush();// 刷新缓冲区的内容,写入磁盘,流仍能使用
            fileWriter.close();// 关闭流,不可使用
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void getFile(File f, String fileName, String fileType) {
        if (f.isDirectory()) {// 如果还有子目录,递归查找
            File[] subFiles = f.listFiles();
            for (File fi : subFiles) {
                getFile(fi, fileName, fileType);
            }
        } else {// 没有子目录
            // 当前文件名称是否匹配
            if (f.getName().equals(fileName)) {
                // 输出文件名
                System.out.println("文件名匹配:" + f.getName());
                // 操作文件数量和路径
                getData1(f);
            }
            // 当前文件类型是否匹配
            if (f.getName().indexOf(fileType) > 0) {
                // 输出文件名
                System.out.println("类型匹配:" + f.getName());
                // 操作文件数量和路径
                getData2(f);
            }
        }
    }

    // 文件名匹配的写入txt文档中
    private static void getData1(File f) {
        try {
            fileWriter.write("文件名匹配" + f.getName() + ":" + " ");
            fileWriter.write(f.getPath() + "\n");
        } catch (IOException e) {
            e.printStackTrace();
        }
        num1++;
    }

    private static void getData2(File f) {
        num2++;
        try {
            fileWriter.write("类型匹配" + f.getName() + "\n");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

IDEA运行结果:
IDEA运行结果
文件写入详情:
文件夹
通过FileWriter创建并写入内容的文件:
通过FileWriter创建并写入内容的文件:


版权声明:本文为weixin_44433166原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。