一、递归遍历文件夹代码详解
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运行结果:
文件写入详情:
通过FileWriter创建并写入内容的文件:
版权声明:本文为weixin_44433166原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。