news 2026/5/26 1:48:25

基于IO流的三个小程序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于IO流的三个小程序

在指定目录下查询文件名是否包含该关键字

思路

首先,需要判断先判断用户输入的目录是否村咋,不存在就直接返回并提示用户该目录不存在,如果存在就先下一步,看这个文件是否是目录,如果不是目录也直接返回,如果前两步都满足了,那就可以让用户输入查询的关键字,关键字不能为空,然后接着遍历目录下的每个文件,先创建一个文件数组,用来存在每个目录下的文件,如果是空的就直接返回,如果不是空的就使用foreach去取出里面的每个元素一一进行判断是文件还是目录,是目录就递归,文件就判断是否包含,发现包含就开始询问用户是否删除

具体解析

在这段代码中,首先就是先判断是否存在这个目录,然后就判断是否是目录,接着开始判断是否是字符注意不能为空,是字符就跳转dealfile中去处理

这里创建一个文件数组用来存在目录下的每个文件或目录,如果是空的就返回,如果不是空的就开始取出每一个分别去判断是文件还是目录,是目录就递归,是文件就判断是否包含,包含就跳转到scanfile

在这里就是真正的处理文件的地方了,判断这个文件的名字是否包含关键字,如果是的话就返回文件的绝对路径,然后询问用户是否删除,然后判断一下是否真的删除成功了就结束。

源码:

package HomeWork; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * Created with IntelliJ IDEA. * Description: * User: zhany * Date: 2025-12-12 * Time: 19:05 */ /*搜索指定的目录,找到所以包含指定字符的文件(不包含目录)*/ public class Search { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入你要扫描的目录"); String rootDirpath = scanner.next(); File rootFile = new File(rootDirpath); if (!rootFile.isDirectory()) { System.out.println("目录错误或不存在"); return; } System.out.println("请输入你要查找的字符"); String key = scanner.next(); sacnDir(rootFile,key); } private static void sacnDir(File rootFile, String key) { File[] files = rootFile.listFiles(); if (files == null) { return; } for (File file: files) { if(file.isFile()){ dealFile(file,key); } else { sacnDir(file,key); } } } private static void dealFile(File file, String key) { if (file.getName().contains(key)) { System.out.println("发现文件" + file.getAbsoluteFile() + "是否删除 y /n"); Scanner scanner = new Scanner(System.in); String input = scanner.next(); if (input.equalsIgnoreCase("y")) { file.delete(); System.out.println("文件已删除!"); } } } }

复制一份文件

思路

首先需要判断用户传入的源文件是否存在,不存在或者不是文件都return,接着就要去判断用户选择的目标路径的父目录是否存在,因为父目录不存在的情况下是没办法进行操作的,接着就可以使用文件的io流开始读取和写入文件了

具体实现

首先,先判断源文件是否存在或为文件

然后判断文件要复制的路径的父目录是否存在

接着使用文件IO流写入即可

源码

package HomeWork; import java.io.*; import java.util.Scanner; /** * Created with IntelliJ IDEA. * Description: * User: zhany * Date: 2025-12-13 * Time: 10:14 */ public class CopyReward { public static void main(String[] args) { System.out.println("请输入源文件的路径"); Scanner scanner = new Scanner(System.in); String srcPath = scanner.nextLine(); File srcfile = new File(srcPath); if (!srcfile.exists()) { System.out.println("该路径不存在"); return; } if (!srcfile.isFile()) { System.out.println("不是文件"); return; } System.out.println("请输入目标路径"); String destPath = scanner.nextLine(); File destfile = new File(destPath); if (!destfile.getParentFile().exists()) { System.out.println("不存在该目录"); return; } try(InputStream inputStream = new FileInputStream(srcfile); OutputStream outputStream = new FileOutputStream(destfile)) { byte[] bytes = new byte[1024]; while (true){ int n = inputStream.read(bytes); if (n == -1) { break; } outputStream.write(bytes,0,n); } System.out.println("创建成功"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

查询指定目录下是否包含关键字,内容包含也算

思路

这个第三个和第一个的思路大差不差,区别就在于最后的时候要去读取文件内容是否包含关键字,其他的逻辑和第一个都是类似的

具体实现

首先先检查用户输入的路径存在与否和有无问题,有就退出程序

其次开始检查关键字,在用户传入的目录中,先创建一个文件数组用来存储目录中的目录和文件,是文件就跳转到srcfile,不是就递归

最后这个也很简单,如果文件名包含就不用检查内容了,如果文件名不包含那么就去检查内容,内容使用read去读取,然后拼接到字符串中,最后使用indexof去判断是否包含这个关键字,包含就会返回>=0

源码

package HomeWork; import java.io.*; import java.util.Scanner; /** * Created with IntelliJ IDEA. * Description: * User: zhany * Date: 2025-12-13 * Time: 10:35 */ public class ContentReaward { public static void main(String[] args) { System.out.println("请输入你要查询的路径"); Scanner scanner = new Scanner(System.in); String srcPath = scanner.nextLine(); File rootFile = new File(srcPath); if (!rootFile.exists()) { System.out.println("该目录不存在"); return; } if (!rootFile.isDirectory()) { System.out.println("该目录有误"); return; } System.out.println("请输入查询的关键字"); String keyword = scanner.nextLine(); dealFile(rootFile,keyword); } private static void dealFile(File rootFile, String keyword) { File[] files = rootFile.listFiles(); if (files == null) { return; } for (File file :files){ if (file.isFile()) { srcFile(file,keyword); } else { dealFile(file,keyword); } } } private static void srcFile(File file, String keyword) { if (file.getName().contains(keyword)) { System.out.println("文件名包含关键字"+keyword+file.getAbsoluteFile()); } else { StringBuilder stringBuilder = new StringBuilder(); try(Reader reader = new FileReader(file);) { char[] chars = new char[1024]; while (true){ int n = reader.read(chars); if (n == -1) { break; } stringBuilder.append(chars,0,n); } if (stringBuilder.indexOf(keyword) >= 0) { System.out.println("文件的内容包含" +file.getAbsoluteFile()); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 4:54:17

3个GitHub Actions自动化构建技巧,让Deep-Live-Cam部署效率提升500%

还在为AI项目繁琐的部署流程而苦恼吗?Deep-Live-Cam作为一款仅需单张图片就能实现实时人脸交换的创新工具,通过GitHub Actions实现了从代码提交到Windows可执行文件的全自动构建。本文将带你深入拆解这套自动化流程的核心技术,从场景痛点出发…

作者头像 李华
网站建设 2026/5/26 4:56:12

HarmonyOS模块配置终极指南:5步快速掌握module.json5核心技巧

HarmonyOS模块配置终极指南:5步快速掌握module.json5核心技巧 【免费下载链接】harmony-utils harmony-utils 一款功能丰富且极易上手的HarmonyOS工具库,借助众多实用工具类,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、…

作者头像 李华
网站建设 2026/5/25 15:24:27

美国2025年人工智能(AI)战略详细清单

美国使出吃奶的劲要赢下AI竞赛:2025年美国人工智能战略核心布局摘要:2025年特朗普政府以“赢得全球AI竞赛”为目标,构建“基建先行、国家护航、监管松绑”战略体系。1月“星际之门”项目启动,企业联合投资5000亿美元建算力底座&am…

作者头像 李华
网站建设 2026/5/26 4:51:36

8、树莓派传感器项目实践:从测距到环境监测

树莓派传感器项目实践:从测距到环境监测 在当今科技时代,传感器无处不在,它们为我们的生活和工作带来了极大的便利。本文将带您深入了解如何使用树莓派(RasPi)与不同类型的传感器进行交互,包括超声波传感器、温度湿度传感器和光照传感器等。我们将从构建超声波测距仪开始…

作者头像 李华
网站建设 2026/5/26 4:51:32

TrollRestore 终极指南:iOS 系统应用替换完整教程

TrollRestore 终极指南:iOS 系统应用替换完整教程 【免费下载链接】TrollRestore TrollStore installer for iOS 17.0 项目地址: https://gitcode.com/gh_mirrors/tr/TrollRestore TrollRestore 是一款专为 iOS 设备设计的革命性工具,它能够智能替…

作者头像 李华
网站建设 2026/5/26 4:25:17

JSMpeg数据埋点:如何从零搭建播放器健康监控体系?

JSMpeg数据埋点:如何从零搭建播放器健康监控体系? 【免费下载链接】jsmpeg MPEG1 Video Decoder in JavaScript 项目地址: https://gitcode.com/gh_mirrors/js/jsmpeg "视频又卡了!"——这是每个前端工程师最怕听到的用户反…

作者头像 李华