java使用FileVisitor遍历文件和目录

在早期的Java版本中,如果需要对指定目录下的文件进行遍历,则需要用递归的方法来实现,这种方法有点复杂,而且灵活性也不高。而使用Java7中Files工具类中的walkFileTree()方法可以很容易的实现对目录下的所有文件进行遍历。这个方法需要一个Path和一个FileVisitor参数。其中Path是要遍历的路径,而FileVisitor则可以看成的一个文件访问器,它主要提供的四个方法,这在程序中可以看到。而FileVisitor四个方法返回的都是FileVisitResult对象,它是一个枚举类,代表的是返回之后的一些后续的操作。

FileVisitResult主要包含四个常见的操作。

1、FileVisitResult.CONTINUE 继续遍历
2、FileVisitResult.TERMINATE 中止访问
3、FileVisitResult.SKIP_SIBLINGS 不访问同级的文件或目录
4、FileVisitResult.SKIP_SUBTREE 不访问子目录

通过创建SimpleFileVisitor对象来对文件进行遍历即可,它是FileVisitor的实现类,这样可以有选择的重写指定的方法

下面的程序是使用FileVisitor对目录进行遍历,该程序还简单实现了在指定的目录下查找文件。

package com.sdjz.test1;

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.List;

public class FileVisitorTest {

  public static void main(String[] args) throws IOException {
    // 使用FileVisitor对目录进行遍历
    Files.walkFileTree(Paths.get("d:", "workspace"), 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("正在访问" + file + "文件");
        if (file.endsWith("FilesTest.java")) {
          System.out.println("------已找到FilesTest.java,文件内容-----");
          List<String> list = Files.readAllLines(file);
          // 打印出文件的内容
          System.out.println(list);
          return FileVisitResult.TERMINATE;
        }
        return FileVisitResult.CONTINUE;
      }

      // 在访问失败时触发该方法
      @Override
      public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
        // 写一些具体的业务逻辑
        return super.visitFileFailed(file, exc);
      }

      // 在访问目录之后触发该方法
      @Override
      public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
        // 写一些具体的业务逻辑
        return super.postVisitDirectory(dir, exc);
      }
    });
  }
}

下面的程序运行的效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java递归 遍历目录的小例子

    复制代码 代码如下: public static void main(String[] args) { File f = new File("D:\\test\\fsd");         listChids(f,0); } public static void listChids(File f,int level){ String preSrt = "";         for(int i=0;i<level;i++){ preSrt += "

  • Java函数式编程(十一):遍历目录

    列出目录中的文件 用File类的list()方法可以很容易的列出目录中的所有文件的文件名.如果想要获取文件而不止是文件名的话,可以使用它的listFiles()方法.这很简单,难的是怎么去处理这个返回的列表.我们不再使用传统的冗长的外部迭代器,而是使用优雅的函数式来实遍历这个列表.这里我们还得用到JDK的新的CloseableStream接口以及一些相关的高阶函数. 下面这段代码可以列出当前目录下所有文件的名字. 复制代码 代码如下: Files.list(Paths.get(".")

  • Java使用File类遍历目录及文件实例代码

    1. 构造函数 File(String args0)//使用一个表示文件或目录的路径的字符串创建一个File对象 File(URL args0)//使用一个URL对象创建File对象 File(File args0, String args1)//使用一个File对象(一般是目录)和一个文件名字符串创建File对象 File(String args0, String args1)//使用一个目录字符串和一个文件名字符串创建对象 使用File类需要注意两点: 第一,File类用于表示文件或目录的名

  • Java文件操作之按行读取文件和遍历目录的方法

    按行读取文件 package test; import java.io.*; import java.util.*; public class ReadTest { public static List<String> first_list; public static List<String> second_list; public ReadTest() { first_list = new LinkedList<>(); second_list = new Link

  • java使用FileVisitor遍历文件和目录

    在早期的Java版本中,如果需要对指定目录下的文件进行遍历,则需要用递归的方法来实现,这种方法有点复杂,而且灵活性也不高.而使用Java7中Files工具类中的walkFileTree()方法可以很容易的实现对目录下的所有文件进行遍历.这个方法需要一个Path和一个FileVisitor参数.其中Path是要遍历的路径,而FileVisitor则可以看成的一个文件访问器,它主要提供的四个方法,这在程序中可以看到.而FileVisitor四个方法返回的都是FileVisitResult对象,它是一

  • php使用glob函数遍历文件和目录详解

    php glob()函数返回匹配指定模式的文件名或目录.因此我们可以使用glob函数来查找文件,也可以实现目录的遍历. 函数说明:array glob ( string $pattern [, int $flags ] ) 功能:寻找与模式匹配的文件路径,返回包含匹配文件(目录)的数组(注:被检查的文件必须是服务器系统的,不能用于远程文件) 参数说明:第一个参数:匹配模式:第二个可选参数: GLOB_MARK - 在每个返回的项目中加一个斜线 GLOB_NOSORT - 按照文件在目录中出现的原

  • C++遍历文件夹目录的方法

    一.方法一:VS2019 // dirlist.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include <string> #include <io.h> #include <vector> #include <iostream> using namespace std; /************************************************************

  • C# 遍历文件夹子目录下所有图片及遍历文件夹下的文件

    要求:取指定目录下面的所有图片,以表格的型式展示并显示该图片的相对路径. 服务端代码: public partial class ViewIcon : System.Web.UI.Page { JArray ja = new JArray(); //定义一个数组 public string info = string.Empty; protected void Page_Load(object sender, EventArgs e) { var path1 = System.AppDomain

  • Java IO流和文件操作实现过程解析

    Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类型.对象.本地化字符集等等. 一个流可以理解为一个数据的序列.输入流表示从一个源读取数据,输出流表示向一个目标写数据. Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中. 控制台输入 BufferedReader br = new BufferedReader(new InputStreamReader(Syste

  • java 对文件夹目录进行深度遍历实例代码

    java 对文件夹目录进行深度遍历实例代码 1.题目 对指定目录进行所有内容的列出(包含子目录中的内容),也可以理解为对目录进行深度遍历. 2.解题思想 从电脑中获取文件目录,建立函数对其遍历,在这个函数中需要对该目录中的每个文件进行判断,如果文件还是目录,则调用函数本身继续对其进行遍历,如果文件不是目录,则直接输出文件名.为了加强显示的效果,我们还可以建立一个getSpace函数,对其进行缩进. 需要注意的是,不要直接遍历C盘的内容,其目录层次太深,含有太多的系统级文件,容易返回为空,导致空指

  • Java的二叉树排序以及遍历文件展示文本格式的文件树

    Java二叉树排序算法 排序二叉树的描述也是一个递归的描述, 所以排序二叉树的构造自然也用递归的: 排序二叉树的3个特征: 1:当前node的所有左孩子的值都小于当前node的值: 2:当前node的所有右孩子的值都大于当前node的值: 3:孩子节点也满足以上两点 package test.sort; public class BinaryNode { private int value;//current value private BinaryNode lChild;//left chil

  • Java实现上传文件图片到指定服务器目录

    具体代码如下所示: ***web.xml*** <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xm

  • java中File类应用遍历文件夹下所有文件

    本文要求遍历指定文件夹下的所有文件,包括子文件夹下的文件,供大家参考,具体内容如下 代码: package 遍历文件夹所有文件; import java.io.File; public class Test { public static void main(String[] args){ File file=new File("D:\\tcb\\周总结"); filesDirs(file); } //使用递归遍历文件夹及子文件夹中文件 public static void files

  • Java遍历文件夹及子目录代码实例

    主要逻辑 使用scanner类获取输入的目录,并创建文件对象. 新建一个遍历文件夹的方法,参数是已创建的文件对象,递归调用自己. import java.io.File; public class BianLi{ public static void huoQuMuLu(File a) { File[] fd = a.listFiles(); //获取目录数组 for(int i=0;i<fd.length;i++){ //将文件对象数组转换为字符数组,并输出数组 System.out.prin

随机推荐