本文简单记录一下一个简单功能:递归搜索指定目录下具有某个后缀名的所有文件。
在JDK 1.7之前,我会使用类似如下的办法:
package my.utils.algorithm.files;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class FileFinder {
public static void main(String[] args) {
FileFinder finder = new FileFinder();
List<String> filenameList = new ArrayList<String>();
finder.findFiles(".java" , "D:\\workspace\\AlgorithmUtils\\src", filenameList);
/**
* 打印出结果
*/
for (String filename : filenameList) {
System.out.println(filename);
}
}
/**
* 寻找指定目录下,具有指定后缀名的所有文件。
*
* @param filenameSuffix : 文件后缀名
* @param currentDirUsed : 当前使用的文件目录
* @param currentFilenameList :当前文件名称的列表
*/
public void findFiles(String filenameSuffix, String currentDirUsed,
List<String> currentFilenameList) {
File dir = new File(currentDirUsed);
if (!dir.exists() || !dir.isDirectory()) {
return;
}
for (File file : dir.listFiles()) {
if (file.isDirectory()) {
/**
* 如果目录则递归继续遍历
*/
findFiles(filenameSuffix,file.getAbsolutePath(), currentFilenameList);
} else {
/**
* 如果不是目录。
* 那么判断文件后缀名是否符合。
*/
if (file.getAbsolutePath().endsWith(filenameSuffix)) {
currentFilenameList.add(file.getAbsolutePath());
}
}
}
}
}
输出结果:
D:\workspace\AlgorithmUtils\src\my\eclipse\serial\MyEclipseGen.java
D:\workspace\AlgorithmUtils\src\my\utils\algorithm\files\FileFinder.java
D:\workspace\AlgorithmUtils\src\my\utils\algorithm\files\FileUtils.java
D:\workspace\AlgorithmUtils\src\my\utils\algorithm\files\FileVisitorUtil.java
D:\workspace\AlgorithmUtils\src\my\utils\algorithm\sudoku\Main.java
D:\workspace\AlgorithmUtils\src\my\utils\algorithm\sudoku\SudokuPuzzleGenerator.java
如果使用的是JDK 1.7,那么
Files.walkFileTree会是一个很好的选择。
这个类位于java.nio.file包下,这个包是JDK 1.7中新增的。
样例代码如:
package my.utils.algorithm.files;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.List;
public class FileVisitorUtil {
public static void main(String[] args) throws IOException {
Path startingDir = Paths.get("D:\\workspace\\AlgorithmUtils\\src");
FindFileVisitor findJavaVisitor = new FindFileVisitor(".java");
Files.walkFileTree(startingDir, findJavaVisitor);
for (String name : findJavaVisitor.getFilenameList()) {
System.out.println(name);
}
}
}
class FindFileVisitor extends SimpleFileVisitor<Path> {
private List<String> filenameList = new ArrayList<String>();
private String fileSuffix = null;
public FindFileVisitor(String fileSuffix) {
this.fileSuffix = fileSuffix;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
if (file.toString().endsWith(fileSuffix)) {
filenameList.add(file.toString());
}
return FileVisitResult.CONTINUE;
}
public List<String> getFilenameList() {
return filenameList;
}
public void setFilenameList(List<String> filenameList) {
this.filenameList = filenameList;
}
}
输出结果:
D:\workspace\AlgorithmUtils\src\my\eclipse\serial\MyEclipseGen.java
D:\workspace\AlgorithmUtils\src\my\utils\algorithm\files\FileFinder.java
D:\workspace\AlgorithmUtils\src\my\utils\algorithm\files\FileUtils.java
D:\workspace\AlgorithmUtils\src\my\utils\algorithm\files\FileVisitorUtil.java
D:\workspace\AlgorithmUtils\src\my\utils\algorithm\sudoku\Main.java
D:\workspace\AlgorithmUtils\src\my\utils\algorithm\sudoku\SudokuPuzzleGenerator.java
分享到:
相关推荐
java递归指定目录文件后缀名个数
本段代码主要是使用Java编写的递归获取指定路径下获取匹配后缀文件列表程序,可以做出多种扩展。如有疑问,可以留言,欢迎下载和支持。 本段代码主要是使用Java编写的递归获取指定路径下获取匹配后缀文件列表程序,可以...
java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取...
java实现批量递归修改目录下所有文件
Java递归读取文件例子 Java递归列出目录下全部文件 /** * 列出指定目录的全部内容 * */
C# 用递归的方式查找指定文件夹下的所有子目录,C#代码 采用递归的方法來查找指定文件夹及它的所有子文件夹裏的内容。
VC利用递归实现指定目录下的EXE文件查找.
so easy,写了一个递归删除目录,但结果出乎意料,一个递归目录删除成功,而另外一个却删除失败,刚开始怀疑文件被占用问题,后来被排除了。后来尝试使用各种工具,文件粉碎机都不能解决。最后,通过重命名解决此...
递归实现遍历目录下子所有目录内所有文件
通过FTP协议下载一个文件夹(目录),可以实现递归方式下载,将本地文件与FTP服务器文件对比,增量下载。
本代码使用c语言,可执行递归删除指定文件夹下所有的文件(包含文件以及文件夹)的操作,注释详细,易于使用或修改
1)指定任意目录,实现文件递归搜索,并且可将搜索到的文件拷贝到指定位置,且保持原目录结构; 2)对于搜索到的文件,加上指定后缀(以.bak为例),然后拷贝到指定目录; 3)实现将指定目录下的指定后缀(以.bak为...
这是一个使用java开发了类,可以递归删除文件目录。
使用递归生成文件目录树 .txt 使用递归生成文件目录树 .txt
JAVA程序递归方式搜索文件夹 JAVA程序递归方式搜索文件夹
递归算法之输出某个目录下所有文件和子目录列表Java系列2021.pdf
一个递归删除指定目录和文件的例子一个递归删除指定目录和文件的例子一个递归删除指定目录和文件的例子一个递归删除指定目录和文件的例子一个递归删除指定目录和文件的例子一个递归删除指定目录和文件的例子
java递归删除整个文件夹,可以文件夹中所有的文件和子文件夹
java:用递归方法删除文件
C# FTP递归下载文件(子目录和子目录中的文件 服务器使用的Serv-u软件 Visual Studio 2008专业版编译 Winfrom 实例,修改FTP连接信息即可编译使用