Java读取其下所有文件夹与文件路径的方法

 更新时间:2018年03月15日 10:46:59   作者:yongh701  
这篇文章主要为大家详细介绍了Java读取其下所有文件夹与文件路径的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Java读取其下所有文件夹与文件的路径,具体内容如下

如果在f:\aa文件夹中,有如下图的文件夹与文件:

那么,在Java中,则如此读取f:/aa下的所有文件路径:

1、首先由于用到了文件与容器类下的ArrayList,所以在开头要引入如下包:

import java.io.*; 
import java.util.*; 

2、方法如下,其中File dirFile除了盘符,比如f:,以外,能够接受一切合法的路径。由于盘符下含有一些系统文件,拒绝访问,因为读取盘符,可能会出现空指针异常。

//这里是仅仅查询当前路径下的所有文件夹、文件并且存放其路径到文件数组 
//由于遇到文件夹不查询其包含所有子文件夹、文件,因此没必要用到递归 
public static ArrayList<String> Dir(File dirFile) throws Exception { 
  ArrayList<String> dirStrArr = new ArrayList<String>(); 
 
  if (dirFile.exists()) { 
    //直接取出利用listFiles()把当前路径下的所有文件夹、文件存放到一个文件数组 
    File files[] = dirFile.listFiles(); 
    for (File file : files) { 
      //如果传递过来的参数dirFile是以文件分隔符,也就是/或者\结尾,则如此构造 
      if (dirFile.getPath().endsWith(File.separator)) { 
        dirStrArr.add(dirFile.getPath() + file.getName()); 
      } else { 
        //否则,如果没有文件分隔符,则补上一个文件分隔符,再加上文件名,才是路径 
        dirStrArr.add(dirFile.getPath() + File.separator 
            + file.getName()); 
      } 
    } 
  } 
  return dirStrArr; 
} 

其上的方法,是不读取f:\aa下的新建文件夹下的xlsx,如果在读取的过程中,遇到文件夹要同时读取其包含所有子文件夹、文件时,则要用到递归,先设置一个全局的动态数组:

public static ArrayList<String> dirAllStrArr = new ArrayList<String>(); 

然后方法如下:

public static void DirAll(File dirFile) throws Exception { 
 
  if (dirFile.exists()) { 
    File files[] = dirFile.listFiles(); 
    for (File file : files) { 
      //如果遇到文件夹则递归调用。 
      if (file.isDirectory()) { 
        // 递归调用 
        DirAll(file); 
      } else { 
        //如果遇到文件夹则放入数组 
        if (dirFile.getPath().endsWith(File.separator)) { 
          dirAllStrArr.add(dirFile.getPath() + file.getName()); 
        } else { 
          dirAllStrArr.add(dirFile.getPath() + File.separator 
              + file.getName()); 
        } 
      } 
    } 
  } 
} 

其实在读取的过程中,关键是利用listFiles()方法,获取本文件夹下的所有文件列表,之后和《【Java】移动文件夹及其所有子文件与子文件夹》点击打开链接), 《【Java】利用文件输入输出流完成把一个文件夹内的所有文件拷贝的另一的文件夹的操作》 点击打开链接)一样,遇到文件夹则进行递归。

上面整个方法的来起来是这样的一个java文件:

import java.io.*; 
import java.util.*; 
 
public class fileList { 
  // 设置一个全局动态数组,来存放文件路径 
  // 主要遍历文件夹,包含所有子文件夹、文件的情况时,用到递归,所以要这样设置 
  public static ArrayList<String> dirAllStrArr = new ArrayList<String>(); 
 
  // 这里是仅仅查询当前路径下的所有文件夹、文件并且存放其路径到文件数组 
  // 由于遇到文件夹不查询其包含所有子文件夹、文件,因此没必要用到递归 
  public static ArrayList<String> Dir(File dirFile) throws Exception { 
    ArrayList<String> dirStrArr = new ArrayList<String>(); 
 
    if (dirFile.exists()) { 
      // 直接取出利用listFiles()把当前路径下的所有文件夹、文件存放到一个文件数组 
      File files[] = dirFile.listFiles(); 
      for (File file : files) { 
        // 如果传递过来的参数dirFile是以文件分隔符,也就是/或者\结尾,则如此构造 
        if (dirFile.getPath().endsWith(File.separator)) { 
          dirStrArr.add(dirFile.getPath() + file.getName()); 
        } else { 
          // 否则,如果没有文件分隔符,则补上一个文件分隔符,再加上文件名,才是路径 
          dirStrArr.add(dirFile.getPath() + File.separator 
              + file.getName()); 
        } 
      } 
    } 
    return dirStrArr; 
  } 
 
  public static void DirAll(File dirFile) throws Exception { 
 
    if (dirFile.exists()) { 
      File files[] = dirFile.listFiles(); 
      for (File file : files) { 
        // 如果遇到文件夹则递归调用。 
        if (file.isDirectory()) { 
          // 递归调用 
          DirAll(file); 
        } else { 
          // 如果遇到文件夹则放入数组 
          if (dirFile.getPath().endsWith(File.separator)) { 
            dirAllStrArr.add(dirFile.getPath() + file.getName()); 
          } else { 
            dirAllStrArr.add(dirFile.getPath() + File.separator 
                + file.getName()); 
          } 
        } 
      } 
    } 
  } 
 
  public static void main(String[] args) throws Exception { 
    File dirFile = new File("f:/aa"); 
    System.out.println(Dir(dirFile)); 
    DirAll(dirFile); 
    System.out.println(dirAllStrArr); 
  } 
} 

运行结果如下:

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

相关文章

  • maven多moudle项目在idea里面显示多个root问题及解决

    maven多moudle项目在idea里面显示多个root问题及解决

    这篇文章主要介绍了maven多moudle项目在idea里面显示多个root问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • hadoop序列化实现案例代码

    hadoop序列化实现案例代码

    序列化想必大家都很熟悉了,对象在进行网络传输过程中,需要序列化之后才能传输到客户端,或者客户端的数据序列化之后送达到服务端,本文将为大家介绍Hadoop如何实现序列化,需要的可以参考一下
    2022-01-01
  • java链式创建json对象的实现

    java链式创建json对象的实现

    本文主要介绍了java中如何通过最简单的方式实现链式创建json对象,解决创建json代码臃肿的问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • mybatis利用association或collection传递多参数子查询

    mybatis利用association或collection传递多参数子查询

    今天小编就为大家分享一篇关于mybatis利用association或collection传递多参数子查询,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Spring中的StopWatch记录操作时间代码实例

    Spring中的StopWatch记录操作时间代码实例

    这篇文章主要介绍了Spring中的StopWatch记录操作时间代码实例,spring-framework提供的一个StopWatch类可以做类似任务执行时间控制,也就是封装了一个对开始时间,结束时间记录操作的Java类,需要的朋友可以参考下
    2023-11-11
  • Spring中的Filter过滤器详解

    Spring中的Filter过滤器详解

    这篇文章主要介绍了Spring中的Filter过滤器详解,Filter 程序是一个实现了特殊接口的 Java 类,与 Servlet 类似,也是由 Servlet 容器进行调用和执行的,需要的朋友可以参考下
    2023-08-08
  • Java经典设计模式之模板方法模式定义与用法示例

    Java经典设计模式之模板方法模式定义与用法示例

    这篇文章主要介绍了Java经典设计模式之模板方法模式,简单说明了模板方法模式的原理、定义,并结合实例形式分析了java模板方法模式的具体使用方法,需要的朋友可以参考下
    2017-08-08
  • Java中list.foreach不能使用字符串拼接的问题

    Java中list.foreach不能使用字符串拼接的问题

    这篇文章主要介绍了Java中list.foreach不能使用字符串拼接的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java练习题之实现平方根(sqrt)函数

    Java练习题之实现平方根(sqrt)函数

    这篇文章主要介绍了Java练习题之实现平方根(sqrt)函数的相关资料,平方根是一个数学概念,表示一个数的正平方根,文中通过代码和图文介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • Java实现MD5加密算法方法例子

    Java实现MD5加密算法方法例子

    这篇文章主要给大家介绍了关于Java实现MD5加密算法方法的相关资料,MD5加密是一种常见的加密方式,我们经常用在保存用户密码和关键信息上,需要的朋友可以参考下
    2023-10-10

最新评论