基于递归与Java的简单文件查找(含源码)

学习目标

利用Java语言与递归实现简单的文件查找

实现基础

在这里插入图片描述
java.io.File

有关File类的描述可以在Oracle的Java网站http://docs.oracle.com/javase/7/docs/api/java/io/File.html上获取,为了使用这个类,必须使用import java.io.File。File类中相关的方法描述如下:

·File(String pathname)——接受一个路径名的构造器,它会创建一个File对象,对应于这个路径名表示的文件或目录。
·String getAbsolutePath()——返回File对象的路径名,例如C:\Papers\TermPaper.odt。
·String getName()——返回File对象的名字,例如TermPaper.odt。
·boolean isDirectory()——测试File对象是否是一个目录。
·File[]listFiles()——如果File对象是一个目录,那么该方法会返回一个File对象数组,对应于这个目录中所有的项。

在这里插入图片描述


学习内容

编写一个静态递归方法String searchForFile(File currentFolder,String filename),其中第一参数应该是一个File对象,用于指定搜索名字为filename的文件时所使用的根路径。这个方法应该递归地在所有子文件夹中搜索文件,并返回第一个匹配项的完整路径名。例如,如果currentFolder被设置成了C:\,文件名是"foo.txt",那么它可能会返回"C:\Code\Stuff\foo.txt",如果这是该文件的有效路径的话。如果没有任何文件具有与currentFolder匹配的名字,那么该方法应该返回一个空字符串""。


学习产出

程序主要分为两部分。
  一:searchForFile方法用于在给定的文件夹中查找指定的文件名。如果找到了匹配的文件,它将返回该文件的绝对路径;否则,它将返回一个空格字符串。
  二:main方法,创建类的实例,调用searchForFile方法来搜索指定目录currentFolder下名为filename的文件。最后,将搜索结果打印到控制台。

  step1:定义

首先导入java.io.File类,然后定义一个名为Problem2的公共类。在Problem2类中,定义一个无参构造函数和一个名为searchForFile的方法。该方法接受两个参数:一个File对象表示当前文件夹获或文件夹,另一个是字符串表示要查找的文件名。

  step2:searchForFile方法

在searchForFile方法中,首先检查当前File对象是否为目录。如果不是目录,则比较文件的名称是否与要查找的文件名相同。如果相同,则返回文件的绝对路径;否则返回一个空字符串。

如果当前文件夹是一个目录,则获取该目录下的所有文件和子目录,并将其存储在一个File数组中。然后遍历这个数组,对每个元素递归调用searchForFile方法。如果在递归调用中找到了匹配的文件,则返回该文件的绝对路径。如果遍历完整个数组都没有找到匹配的文件,则返回一个空字符串。

  step3:main方法

创建类的实例,调用searchForFile方法来搜索指定目录currentFolder下名为filename的文件。最后,将搜索结果打印到控制台。

源码

import java.io.File;

public class Problem2 {
    Problem2() {}
    public String searchForFile(File currentFolder,String filename)
    {
        if(!currentFolder.isDirectory())
        {
            if(currentFolder.getName().equals(filename))
                return currentFolder.getAbsolutePath();
            else return " ";
        }
        else
        {
            File[] files=currentFolder.listFiles();

            int len;
            if (files != null) {
                len = files.length;
            }
            else len=0;

            for(int i=0;i<len;i++)
            {
                String str=searchForFile(files[i],filename);
                if(!str.equals(" ")) return str;
            }
            return " ";
        }
    }
    public static void main(String[] args)
    {
        Problem2 problem2=new Problem2();
        String result=problem2.searchForFile(new File("D:/college/"),"test.dat");
        System.out.println(result);
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cxlhyx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值