使用nio遍历文件夹
1、递归方式:
private static void print(File f){
        if(f!=null){
            if(f.isDirectory()){
                File[] fileArray=f.listFiles();
                if(fileArray!=null){
                    for (int i = 0; i < fileArray.length; i++) {
                        //递归调用
                        print(fileArray[i]);
                    }
                }
            }
            else{
                System.out.println("文件为:"+f.getName())
            }
        }
    }
2、nio方式
/**
* nio遍历文件夹下面所有的文件
* @return
* @throws IOException
*/
private static List<File> getFiles(String path) throws IOException {
List<File>files = new ArrayList<>();
Files.walkFileTree( Paths.get(path),new SimpleFileVisitor<Path>(){
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
// System.out.println("正在访问:" + dir + "目录");
return FileVisitResult.CONTINUE;
} @Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
// System.out.println("\t正在访问" + file + "文件");
files.add(file.toFile());
return super.visitFile(file, attrs);
} });
return files;
}
!!注意,里面的文件和目录要区别开;
!可以看到它是一个模板接口,但是在walkFileTree中它的类型已经确定了就是Path,因此里面的T类型就是Path类型了;
iv. 接口方法的返回值FileVisitResult是一个枚举类型,walkFileTree就是会根据这个返回值决定是否要继续遍历下去,如果要继续遍历则应该怎样遍历,它总共有4个枚举值:都是FileVisitResult中定义的枚举值
CONTINUE:继续遍历
SKIP_SIBLINGS:继续遍历,但忽略当前节点的所有兄弟节点直接返回上一层继续遍历
SKIP_SUBTREE:继续遍历,但是忽略子目录,但是子文件还是会访问;
TERMINATE:终止遍历
实际使用中通常直接继承FileVisitor的适配器SimpleFileVisitor,因为只需要实现你感兴趣的方法即可,无需4个方法全部都实现;
!!Path可以像String那样进行字符串校验,校验路径中的字符串:都是Path的对象方法
a. boolean startsWith(String other); // 前缀检查
b. boolean startsWith(Path other);
c. boolean endsWith(String other); // 后缀检查
d. boolean endsWith(Path other);
!!比较的都是其path成员字符串里的内容,并不会深入文件系统用完整的绝对路径来比较
使用nio遍历文件夹的更多相关文章
- C#遍历文件夹下所有文件
		
FolderForm.cs的代码如下: using System; using System.Collections.Generic; using System.Diagnostics; using ...
 - windowsAPI遍历文件夹(速度高于递归)
		
#region API 遍历文件夹及其子文件夹和子文件 #region 声明WIN32API函数以及结构 ************************************** [DllImpo ...
 - C# 遍历文件夹下所有子文件夹中的文件,得到文件名
		
假设a文件夹在F盘下,代码如下.将文件名输出到一个ListBox中using System.Data;using System.Drawing;using System.Linq;using Syst ...
 - python 遍历文件夹 文件
		
python 遍历文件夹 文件 import os import os.path rootdir = "d:\data" # 指明被遍历的文件夹 for parent,dirn ...
 - C#遍历文件夹及文件
		
背景: 想自己实现一个网盘系统,于是需要用到遍历文件(夹)操作. C#基本知识梳理: 1.如何获取指定目录包含的文件和子目录 (1). DirectoryInfo.GetFiles():获取目录中(不 ...
 - Java学习随笔3:遍历文件夹及文件的读取和写入
		
import java.io.File; /** * 遍历文件夹 */ public class ScannerFile { public static void main(String[] args ...
 - java 遍历文件夹里的文件
		
Java遍历文件夹的2种方法: A.不使用递归: import java.io.File; import java.util.LinkedList; public class FileSystem { ...
 - python遍历文件夹下的文件
		
在读文件的时候往往需要遍历文件夹,python的os.path包含了很多文件.文件夹操作的方法.下面列出: os.path.abspath(path) #返回绝对路径 os.path.basename ...
 - JAVA 遍历文件夹下的所有文件
		
JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...
 
随机推荐
- 1.6部署到CentOS「深入浅出ASP.NET Core系列」
			
希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,谢谢关注. 安装.NET Core 官方安装地址: https://www.microsoft.com/net/learn/d ...
 - Python编程从入门到实践笔记——类
			
Python编程从入门到实践笔记——类 #coding=gbk #Python编程从入门到实践笔记——类 #9.1创建和使用类 #1.创建Dog类 class Dog():#类名首字母大写 " ...
 - 【转载】java static 关键字的四种用法
			
原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...
 - Linux 命令行
			
Linux 命令笔记 一.目录/文件 1.1 目录文件日常操作 . -> 当前目录 .. -> 上一级目录 .file/.dir -> 隐藏文件/文件夹 [ls] 查看指定目录文件 ...
 - .net core入门-发布及部署_异常(处理程序“aspNetCore”在其模块列表中有一个错误模块“AspNetCoreModuleV2")处理
			
备注:本人使用开发工具:VS2017,.NET Core 2.2,其中VS2017原本自带2.1,我单独从官网下载了2.2的程序集安装包,但是没有下配套的运行环境,运行项目时出了一个问题. 以下是我在 ...
 - 从QA到工程能效团队
			
Engineering Productivity Productivity is our job; testing and quality are the job of everyone involv ...
 - SpringBoot 动态更新 resources 目录的文件
			
一.前言 SpringBoot 打成 Jar 包形式运行后 ,resources 目录下文件的读取修改和原来不太一样,网上比较多的是关于读取的方式,修改的几乎没有,终于在 stackoverflow ...
 - CentOS7 firewalld 打开关闭端口
			
1. firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status ...
 - appium+python搭建自动化测试框架_TestAPP框架(三)
			
Pycharm 创建 Project,搭建 APPTEST框架如下图: 1.框架功能 业务功能的封装 测试用例封装 测试包管理 截图处理 断言处理 日志获取 测试报告生成 数据驱动 数据配置 2. ...
 - Centos7 使用 kubeadm 安装Kubernetes 1.13.3
			
目录 目录 什么是Kubeadm? 什么是容器存储接口(CSI)? 什么是CoreDNS? 1.环境准备 1.1.网络配置 1.2.更改 hostname 1.3.配置 SSH 免密码登录登录 1.4 ...