java之递归搜索本地磁盘

递归是什么

递归是指函数的定义中函数使用自身方法。即自己调用自己

例如下面:

// 求5的阶乘5!
    int sum = 1;
    for (int i = 1; i <= 5; i++) {
      sum = sum * i;
    }
    System.out.println(sum);

我们通常会用到for循环,而在使用递归的时候,我们就可以很方便的写出结果

例如

// 求5!
  public static int recurve(int i) {
    if (i <= 1) {
      return 1;
    }

    return i * recurve(i - 1);
  }

我们可以看到两个代码段不同,但是结果是相同的,这就是递归的作用

那么,既然可以用for循环来求出结果,那么递归有什么用呢

 当然是简化重复代码的操作次数啦

面对这种简单的代码,可能还看不出递归的优点,那我们换一个代码看看!

进入今天的主题《递归遍历本地文件》

遍历文件,我们首要的是需要知道Java中获取本地磁盘

import java.io.File;

File中有一个静态方法可以获取到本地磁盘

File.listRoots();

他返回了本地有多少个磁盘

知道了这个,我们就可以开始扫描操作了

话不多说,直接上代码

package com.demo.DeepFile;

import java.io.File;
import java.util.ArrayList;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class DeepFile {
  private File[] RootList = File.listRoots();
  private ArrayList<String> dirname = new ArrayList<>();
  private ArrayList<String> filename = new ArrayList<>();

  public DeepFile() {

  }

  public File[] getRootList() {
    return this.RootList;
  }

  public void startDeepFile(File[] list) {
    for (File parentRoot : list) {
      if (parentRoot.listFiles() == null) {
        this.filename.add(parentRoot.getName());
        continue;
      }
      for (File children : parentRoot.listFiles()) {
        if (children.listFiles() == null) {
          this.filename.add(children.getName());
          continue;
        }
        if (children.isDirectory()) {
          this.dirname.add(children.getPath());
          try {
            startDeepFile(children.listFiles());
          } catch (NullPointerException e) {
            e.printStackTrace();
          }
        }
      }
    }
  }

  // 将文件写入到文本
  public boolean writePath() {
    try {
      BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
      for (String dir : this.dirname) {
        bw.write(dir);
        bw.newLine();
        bw.flush();
      }
      BufferedWriter fbw = new BufferedWriter(new FileWriter("b.txt"));
      for (String file : this.filename) {
        fbw.write(file);
        fbw.newLine();
        fbw.flush();
      }
      bw.close();
      fbw.close();
    } catch (IOException IOE) {
      IOE.printStackTrace();
    }

    return true;
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值