java获取文件夹下所有的文件

这篇具有很好参考价值的文章主要介绍了java获取文件夹下所有的文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

对于一个嵌套的目录,获取目录下所有的文件,可以使用以下两种方式:

1. 通过递归获取

File类提供了如下两个方法:

  1. file.list():返回目录下文件和子目录名;(不会递归)
  2. file.listFiles():返回目录下文件和子目录File对象;(不会递归)
/**
     * 得到文件名称
     *
     * @param path 路径
     * @return {@link List}<{@link String}>
     */
    private List<String> getFileNames(String path) {
        File file = new File(path);
        if (!file.exists()) {
            return null;
        }
        List<String> fileNames = new ArrayList<>();
        return getFileNames(file, fileNames);
    }

/**
     * 得到文件名称
     *
     * @param file      文件
     * @param fileNames 文件名
     * @return {@link List}<{@link String}>
     */
    private List<String> getFileNames(File file, List<String> fileNames) {
        File[] files = file.listFiles();
        for (File f : files) {
            if (f.isDirectory()) {
                getFileNames(f, fileNames);
            } else {
                fileNames.add(f.getName());
            }
        }
        return fileNames;
    }

例子中List只是存放了文件夹下所有的文件名,可以根据需求修改List中存放的元素属性。比如可以直接将File对象存入。

2. 使用Files.walk()方法
在jdk8中,可以使用walk方法递归的去查找目录下所有文件。

		// 路径
        String path = "D:\\xxx";
		try (Stream<Path> paths = Files.walk(Paths.get(path))){
            List<Path> fileNames = paths
                    .filter(Files::isRegularFile)
                    .collect(Collectors.toList());
        } catch (IOException e) {
            e.printStackTrace();
        }

walk方法会自动递归子目录。
上例使用了Try with Resources模式,它可以确保无论在什么情况下,流都将关闭。
解释:
如果try块和finally块中的方法都抛出异常那么try块中的异常会被抑制(suppress),只会抛出finally中的异常,而把try块的异常完全忽略。而try-with-resources语句能够帮你自动调用资源的close()函数关闭资源不用到finally块。

walk方法解释:

通过遍历以给定起始文件为根的文件树,返回一个用 Path 惰性填充的 Stream。文件树是深度优先遍历的,流中的元素是 Path 对象,就好像通过解析相对路径来获得的一样。此方法的工作方式就像调用它等同于评估表达式: walk(start, Integer.MAX_VALUE, options) 换句话说,它访问文件树的所有级别。返回的流封装了一个或多个 DirectoryStream。如果需要及时处理文件系统资源,则应使用 try-with-resources 构造来确保在流操作完成后调用流的 close 方法。对关闭的流进行操作将导致 illegalStateException。

illegalStateException是无效状态异常。表示当前对客户端的响应已经结束,不能在响应已经结束(或说消亡)后再向客户端(实际上是缓冲区)输出任何内容。
一般来说无效状态异常是因为弄错了调用一个方法的流程,
例如:比如在JSP/Servlet编程中,服务器已经开始把数据发客户端了,却想改动字符集encoding参数,这个就是错误,因为开始复数据到客户端后就不能再修改任何Http header内容,它们已经发出去了,无法再修改了。

maxDepth参数,设置要递归的深度;Files.walk(Paths.get(path),2)
默认不会自动跟随符号链接, 设置options参数FOLLOW_LINKS选项,则遵循符号链接。 Files.walk(Paths.get(path),FileVisitOption.FOLLOW_LINKS)

示例:

	String path = "D:\\xxx";
	
	//过滤出目录
	try (Stream<Path> paths = Files.walk(Paths.get(dirName))) {
	    paths.filter(Files::isDirectory)
	            .forEach(System.out::println);
	}
 
	//按后缀名过滤
	try (Stream<Path> paths = Files.walk(Paths.get(dirName), 2)) {
	    paths.map(path -> path.toString()).filter(f -> f.endsWith(".png"))
	            .forEach(System.out::println);
	}

需求:传进来上传的文件名通过","分割,检查文件夹中是否存在,不存在返回缺失的文件名
代码:文章来源地址https://www.toymoban.com/news/detail-468016.html

/**
     * 校验文件
     *
     * @param data  文件名数据
     * @return {@link String}
     */
    @Override
    public String validationFile(String data) {
        List<String> fileNames = new ArrayList<>();
        try (Stream<Path> paths = Files.walk(Paths.get(path))) {
            fileNames = paths
                    .filter(Files::isRegularFile)
                    .map(file -> file.getFileName().toString())
                    .collect(Collectors.toList());
        } catch (IOException e) {
            e.printStackTrace();
        }
        //传进来的files
        String[] fileNameArr = data.split(",");
        List<String> missingFile = new ArrayList<>();
        for (String s : fileNameArr) {
            if (!fileNames.contains(s)) {
                missingFile.add(s);
            }
        }
        if (missingFile.size() == 0) {
            return "1";
        }
        return String.join(",", missingFile);
    }

到了这里,关于java获取文件夹下所有的文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python获取文件夹下所有文件

    python获取文件夹下所有文件,大家肯定都会想到os.listdir了,但是这种方法只能够获取到当前文件夹中的所有文件/文件夹,如果我想获得文件夹-文件夹-文件呢? 我的需求是只要文件夹中所有非文件夹,换句话来说对于我们的需求只有文件夹和非文件夹两种情况,那么直接联

    2024年02月12日
    浏览(51)
  • 如何用python获取单个文件 或 文件夹中所有文件的行数

    本例展示获取单个txt文件中的行数: 本例展示获取labels下的所有txt文件内容的总行数: 函数解释 os.walk()是一种遍历目录数的函数,机理类似深度优先搜索和层次搜索策略,其返回的是 root dirs files 返回值解释 root :代表当前遍历的目录路径,string类型 dirs :代表root路径下的

    2024年02月09日
    浏览(75)
  • Python小技巧【1】——获取指定文件夹下的所有文件【glob模块】

    glob模块 是Python标准库中一个重要的模块,主要用来 查找符合特定规则的目录和文件,并将搜索的到的结果返回到一个列表中。  1、常用函数glob() 返回符合匹配条件的所有文件的路径。  2、重要参数recursive recursive参数 代表是否递归调用,与特殊通配符 ** 一同使用,默认为

    2024年02月04日
    浏览(66)
  • PowerShell 获取某目录下所有的文件、文件夹,同时对获取到的文件路径字符串进行替换处理

    前言: 为了将Windows系统下的Java编译文件与linux服务器上的文件进行比较,故进行此文件路径的获取及路径处理。 在只有文件路径 而没有实际文件的情况下的比较。 代码如下: 输出文件(grepKekka.csv): 输出文件(grepKekka1.csv): 输出文件(grepKekka2.csv): 结语: 为了将

    2024年02月13日
    浏览(57)
  • 【java】删除文件夹及文件夹中的所有文件

    删除指定文件夹及文件夹中的所有文件。 JDK 1.8 在JDK 8中,可以使用java.nio.file.Files和java.nio.file.Path类来删除一个文件夹及其中的所有文件和子文件夹。具体代码如下所示: 在上述代码中,请将 your-directory-path 替换为要删除的目录路径。程序首先检查指定路径是否是一个目录,

    2024年02月11日
    浏览(105)
  • c# 通过现在文件夹,获取下面所有的照片,并对其进行统一尺寸裁剪

    c# 通过现在文件夹,获取下面所有的照片,并对其进行统一尺寸裁剪 using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using Syst

    2023年04月26日
    浏览(52)
  • java 在文件夹以及子文件夹中遍历获取指定文件的list

    1.  使用java 递归方法获取指定文件的list,相当于在一个文件夹以及子文件夹,搜索文件的功能。 直接上代码: 

    2024年02月13日
    浏览(63)
  • 【java】如何获取整个文件夹的文件名称

    需求 有时候我们需要一个文件夹里的所有文件的名称我们只能截图,然后再使用微信提取出其中的文字,这样是比较麻烦的,今天给大家介绍使用java提取所有文件的名字,代码如下:

    2024年02月14日
    浏览(56)
  • java项目中获取resources文件夹下文件

    方法一 获取到文件的流 方法二 直接获取路径 以上方法在服务器当中是否能获取到还未测试,公司要做个下载word文档功能,需要使用模板,于是测试了一下本地,后续将继续更新使用easypoi如何下载word文档 方法三 (重要) SpringBoot中所有文件都在jar包中,没有一个实际的路径,因此

    2024年02月12日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包