java基础

Wesley13
• 阅读 523

需求:递归遍历一个目录,筛选出需要查找的文件类型 实现:分别用Java流式实现和递归实现 代码:

package hello; 

import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;

/**
 * Description:
 * <p>
 *
 * @author shuvidora
 * @date 2019/6/12 12:27
 */
class WalkTree {
    /**
     * 流式实现筛选指定目录下指定类型的文件
     */
    public void walkTree() {
        Path start = FileSystems.getDefault().getPath("src");
        try {
            Files.walk(start)
                    .filter(path -> path.toFile().isFile())
                    .filter(path -> path.toString().endsWith(".java"))
                    .forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 默认只扫描当前文件夹
     * @param f
     */
    public void filterFileType(File f) {
        filterFileType(f, false);
    }

    /**
     * 
     * @param file 
     * @param isRecursive 是否递归子文件夹
     */
    public void filterFileType(File file, boolean isRecursive) {
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            for (File f : files) {
                if (f.isFile()) {
                    if (f.getName().endsWith(".java")) {
                        System.out.println(f.getName());
                    }
                } else if(isRecursive && f.isDirectory()) {
                    filterFileType(f, true);
                }
            }
        }
    }
}

// 枚举实现单例模式,线程安全,非延迟加载
enum FileUtils {
    INSTANCE;
    private WalkTree instance;
    FileUtils() {
        instance = new WalkTree();
    } // 默认private构造方法
    public WalkTree getInstance() {
        return instance;
    }
}

public class FileTest {
    public static void main(String[] args) {
        FileUtils main = FileUtils.INSTANCE;
        WalkTree walkTree = main.getInstance();
        //walkTree.walkTree(); //1

        File file = new File("src");
        walkTree.filterFileType(file, true); //2
    }
}

输出:

//1
src\hello\Counter.java
src\hello\FileTest.java
src\housekeeping\Burrito.java


//2
Counter.java
FileTest.java
Burrito.java

拓展

JS中的目录遍历 - https://www.w3cschool.cn/fjvyha/ip9wrozt.html

点赞
收藏
评论区
推荐文章
xxkfz xxkfz
2年前
使用Stream流递归实现遍历树形结构
可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中的Stream流一次性把数据查出来,然后通过流式处理,我们一起来看看,代码实现为了实现简单,就模拟查看数据库所有数据到List里面。比如现在有一张菜单表,具体数据如下:下面我们就来模拟这一操作,递归组装树形结构:@Autowi
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java递归算法+遍历磁盘文件
package com.cnse.io.ioDemo;import java.io.File;//java遍历磁盘下所有的文件 递归 recursionpublic class FlList {    public static void main(String args) {
九路 九路
4年前
二分查找法的递归和非递归的实现
//二分查找法非递归实现,在一个有序的数组中查找e元素的位置,找不到返回1publicstaticintbinarySearch(intdata,inte){intl0;intrdata.length1;while(l<r){
Wesley13 Wesley13
3年前
SQL语句实现递归查询
  最近在开发过程为项目中处理上下层组织关系的时候用到了递归查询,以前一般用的是直接在java中使用递归或者使用SQL的话就是编写存储过程,然后去调用这个存储过程。但是,使用java实现递归的话感觉比较麻烦,而用SQL写存储过程的话一般不建议这么做,所以这边就想到了直接用SQL实现递归。  这里实现递归的是系统中的一个中间关系表(ORG\_TAB
Wesley13 Wesley13
3年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Wesley13 Wesley13
3年前
JAVA递归实现线索化二叉树
JAVA递归实现线索化二叉树基础理论首先,二叉树递归遍历分为先序遍历、中序遍历和后序遍历。先序遍历为:根节点左子树右子树中序遍历为:左子树根节点右子树后序遍历为:左子树右子树根节点(只要记住根节点在哪里就是什么遍历,且都是先左再右)线索化现在有这么一棵二叉树,它的数据结
Wesley13 Wesley13
3年前
Java8 新特性之流式数据处理
一.流式处理简介在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式处理可以在一行中实现。比如我们希望对一个包含整数的集合中筛选出所有的偶数,并将其封装成为一个新的List返回,那么在java8之前,我们需要通过如下代码实现:List<Inte
Wesley13 Wesley13
3年前
Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)
Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.cnblogs.com%2Fliuyang0%2Fp%2F6271331.html)
递归解析Json,实现生成可视化Tree+快速获取JsonPath | 京东云技术团队
内部平台的一个小功能点的实现过程,分享给大家:递归解析Json,可以实现生成可视化Tree快速获取JsonPath。步骤:1.利用JsonPath读取根,获取JsonObject2.递归层次遍历JsonObjec,保存结点信息3.利用zTree展示结点为