在目录中搜索文本文件

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个项目中,你将学习如何使用Java在目录中搜索文本文件。本项目将指导你完成从用户获取输入路径、验证输入、查找目录中的所有文本文件以及打印其名称的过程。

👀 预览

请输入读取路径:/home/labex/project/files
找到的文本文件:
file1.txt
file3.txt
file6.txt

🎯 任务

在这个项目中,你将学习:

  • 如何使用Scanner类获取用户输入的目录路径
  • 如何使用File类验证输入路径
  • 如何创建自定义的FilenameFilter来过滤文本文件
  • 如何使用listFiles()方法在目录中找到所有文本文件
  • 如何遍历找到的文本文件并打印其名称

🏆 成果

完成本项目后,你将能够:

  • 使用Scanner类获取用户输入的目录路径
  • 使用File类验证输入路径
  • 实现自定义的FilenameFilter来过滤文本文件
  • 利用listFiles()方法检索目录中的所有文本文件
  • 遍历找到的文本文件并打印其名称

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("`Java`")) -.-> java/BasicSyntaxGroup(["`Basic Syntax`"]) java(("`Java`")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["`Object-Oriented and Advanced Concepts`"]) java(("`Java`")) -.-> java/FileandIOManagementGroup(["`File and I/O Management`"]) java/BasicSyntaxGroup -.-> java/if_else("`If...Else`") java/BasicSyntaxGroup -.-> java/for_loop("`For Loop`") java/BasicSyntaxGroup -.-> java/output("`Output`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/user_input("`User Input`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/interface("`Interface`") java/FileandIOManagementGroup -.-> java/files("`Files`") java/FileandIOManagementGroup -.-> java/read_files("`Read Files`") java/FileandIOManagementGroup -.-> java/io("`IO`") subgraph Lab Skills java/if_else -.-> lab-300396{{"`在目录中搜索文本文件`"}} java/for_loop -.-> lab-300396{{"`在目录中搜索文本文件`"}} java/output -.-> lab-300396{{"`在目录中搜索文本文件`"}} java/user_input -.-> lab-300396{{"`在目录中搜索文本文件`"}} java/interface -.-> lab-300396{{"`在目录中搜索文本文件`"}} java/files -.-> lab-300396{{"`在目录中搜索文本文件`"}} java/read_files -.-> lab-300396{{"`在目录中搜索文本文件`"}} java/io -.-> lab-300396{{"`在目录中搜索文本文件`"}} end

获取输入路径

在这一步中,你将学习如何使用Scanner类从用户那里获取指定的路径。

  1. 在你的代码编辑器中打开SelectTxtFile.java文件。
  2. main方法中,创建一个新的Scanner对象来读取用户输入:
Scanner scanner = new Scanner(System.in);
  1. 向用户显示一条提示消息,要求输入读取路径:
System.out.print("请输入读取路径:");
  1. 使用nextLine()方法读取用户输入并将其存储在path变量中:
String path = scanner.nextLine();
  1. 读取输入后,关闭Scanner以释放资源:
scanner.close();
✨ 查看解决方案并练习

验证输入路径

在这一步中,你将学习如何使用File类来检查输入路径是否是一个有效的目录。

  1. 使用用户提供的path创建一个新的File对象:
File directory = new File(path);
  1. 使用exists()方法检查目录是否存在:
if (!directory.exists() ||!directory.isDirectory()) {
  1. 如果目录不存在或不是一个目录,则打印错误消息并退出程序:
    System.out.println("该目录不存在,或者它不是一个目录");
    return;
}
✨ 查看解决方案并练习

在目录中查找文本文件

在这一步中,你将学习如何使用FilenameFilter在目录中查找所有文本文件。

  1. 创建一个新的TxtFileFilter类,该类实现FilenameFilter接口:
static class TxtFileFilter implements FilenameFilter {
    @Override
    public boolean accept(File dir, String name) {
        return name.toLowerCase().endsWith(".txt");
    }
}
  1. 使用File类的listFiles()方法获取目录中的文件数组,并使用TxtFileFilter对其进行过滤:
File[] files = directory.listFiles(new TxtFileFilter());
✨ 查看解决方案并练习

打印找到的文本文件

在这最后一步中,你将学习如何遍历找到的文本文件并打印它们的名称。

  1. 打印一个标题,表明已找到文本文件:
System.out.println("找到的文本文件:");
  1. 使用for-each循环遍历files数组,并打印每个文件的名称:
for (File file : files) {
    System.out.println(file.getName());
}

大功告成!你现在已经完成了在目录中搜索文本文件的项目。你可以通过运行SelectTxtFile类来测试你的程序。

✨ 查看解决方案并练习

验证用于文件搜索的Java程序

在这一步中,我们将验证用于文件搜索的Java程序。

  1. 打开你的终端,并使用javac命令编译Java文件:
javac SelectTxtFile.java
  1. 在成功编译Java文件之后,使用java命令执行编译后的程序:
java SelectTxtFile
  1. 运行Java程序时,系统会提示你输入读取路径。提供文本文件所在的目录路径,然后按回车键。
  • 如果该目录不存在或不是一个目录,你将收到一条指出问题的消息。
  • 如果该目录有效且包含文本文件,程序将显示在该目录中找到的文本文件的名称。

以下是预期输出的一个示例:

请输入读取路径:/home/labex/project/files
找到的文本文件:
file1.txt
file3.txt
file6.txt

通过执行这些步骤,你可以验证用于选择文本文件的Java程序的功能。

✨ 查看解决方案并练习

总结

恭喜!你已完成此项目。你可以在LabEx中练习更多实验以提升你的技能。

您可能感兴趣的其他 Java 教程