当前位置: 首页 > news >正文

【小程序练习】文件操作案例

文章目录

  • 前言
  • 1. 案例1
  • 2. 案例2
  • 3. 案例3
  • 总结


前言

我们学会了文件的基本操作 + 文件内容读写操作,接下来,我们实现一些小工具程序,来锻炼我们的能力。

关注收藏, 开始学习吧🧐


1. 案例1

扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;/*
* 扫描指定目录,
* 并找到名称中包含指定字符的所有普通文件(不包含目录),
* 并且后续询问用户是否要删除该文件
* */
public class Demo10 {public static void main(String[] args) throws IOException {Scanner scanner = new Scanner(System.in);System.out.println("请输入您要搜索的根目录: ");String rootPath = scanner.nextLine();File rootDir = new File(rootPath);if (!rootDir.isDirectory()) {System.out.println("您输入的文件不存在或者不是目录, 退出程序");return;}System.out.println("请输入您要搜索的关键词: ");String word = scanner.nextLine();List<File> result = new ArrayList<>();scanDir(rootDir, word, result);System.out.println("搜索完成, 共搜索到 " + result.size() + " 个文件, 分别是");for (File file : result) {System.out.println(file.getCanonicalPath() + "  请问您是否要删除该文件? y/n: ");String in = scanner.next();if (in.toLowerCase().equals("y")) {file.delete();System.out.println("删除成功!");}}}static void scanDir(File rootDir, String word, List<File> result) {File[] files = rootDir.listFiles();if (files == null || files.length == 0) {return;}for (File file : files) {if (file.isDirectory()) {scanDir(file, word, result);} else {if (file.getName().contains(word)) {result.add(file);}}}}
}

2. 案例2

进行普通文件的复制

import java.io.*;
import java.util.Scanner;/*
* 进行普通文件的复制
* */
public class Demo11 {public static void main(String[] args) throws IOException {Scanner scanner = new Scanner(System.in);System.out.println("请输入要复制的源文件路径: ");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 dstPath = scanner.nextLine();File dstFile = new File(dstPath);if (dstFile.exists()) {if (dstFile.isDirectory()) {System.out.println("该文件已存在, 并且是一个目录文件, 请确定路径是否正确, 退出程序");return;}if (dstFile.isFile()) {System.out.println("该文件已存在, 请问是否进行覆盖? y/n: ");String ans = scanner.nextLine();if (ans.toLowerCase().equals("n")) {System.out.println("停止复制");return;}}}try (InputStream inputStream = new FileInputStream(srcFile);OutputStream outputStream = new FileOutputStream(dstFile)) {while (true) {byte[] buf = new byte[1024];int len = inputStream.read(buf);if (len == -1) {break;}outputStream.write(buf, 0, len);}}System.out.println("复制完成");}
}

3. 案例3

扫描指定目录,并找到名称或者内容中包含指定字符的所有普通文件(不包含目录),该案例启示就是案例1的升级版。

注意:我们现在的方案性能较差,所以尽量不要在太复杂的目录下或者大文件下实验

import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;/*
* 扫描指定目录,
* 并找到名称或者内容中包含指定字符的所有普通文件(不包含目录)
* */
public class Demo12 {public static void main(String[] args) throws IOException {Scanner scanner = new Scanner(System.in);System.out.println("请输入您要搜索的根目录: ");String rootPath = scanner.nextLine();File rootDir = new File(rootPath);if (!rootDir.isDirectory()) {System.out.println("您输入的文件不存在或者不是目录, 退出程序");return;}System.out.println("请输入您要搜索的关键词: ");String word = scanner.nextLine();List<File> result = new ArrayList<>();scanDir(rootDir, word, result);System.out.println("搜索完成, 共搜索到 " + result.size() + " 个文件, 分别是");for (File file : result) {System.out.println(file.getCanonicalPath() + "  请问您是否要删除该文件? y/n: ");String in = scanner.next();if (in.toLowerCase().equals("y")) {file.delete();System.out.println("删除成功!");}}}static void scanDir(File rootDir, String word, List<File> result) throws IOException {File[] files = rootDir.listFiles();if (files == null || files.length == 0) {return;}for (File file : files) {if (file.isDirectory()) {scanDir(file, word, result);} else {if (isContentContanis(file, word)) {result.add(file);}}}}static boolean isContentContanis(File file, String word) throws IOException {StringBuffer stringBuffer = new StringBuffer();try (InputStream inputStream = new FileInputStream(file);Scanner scanner = new Scanner(inputStream)) {while (scanner.hasNextLine()) {stringBuffer.append(scanner.nextLine());stringBuffer.append("\r\n");}return stringBuffer.indexOf(word) != -1;}}
}

总结

✨ 想了解更多知识, 请持续关注博主, 本人会不断更新学习记录, 跟随我一起不断学习.
✨ 感谢你们的耐心阅读, 博主本人也是一名学生, 也还有需要很多学习的东西. 写这篇文章是以本人所学内容为基础, 日后也会不断更新自己的学习记录, 我们一起努力进步, 变得优秀, 小小菜鸟, 也能有大大梦想, 关注我, 一起学习.

再次感谢你们的阅读, 你们的鼓励是我创作的最大动力!!!!!

相关文章:

【小程序练习】文件操作案例

文章目录 前言1. 案例12. 案例23. 案例3总结 前言 我们学会了文件的基本操作 文件内容读写操作&#xff0c;接下来&#xff0c;我们实现一些小工具程序&#xff0c;来锻炼我们的能力。 关注收藏, 开始学习吧&#x1f9d0; 1. 案例1 扫描指定目录&#xff0c;并找到名称中包…...

flask框架-[实现websocket]:将socketio处理函数部分集中管理,使用类的方式来管理,集中管理socketio处理函数

一、项目依赖 APScheduler3.10.4 eventlet0.33.3 Flask2.1.3 Flask-Caching1.10.1 Flask-Cors3.0.10 Flask-Migrate2.7.0 Flask-RESTful0.3.9 Flask-SocketIO5.1.1 Flask-SQLAlchemy2.5.1 PyJWT2.3.0 PyMySQL1.0.2 redis3.5.3 SQLAlchemy1.4.0 #额外修改 Werkzeug2.0.2 #额外修…...

Vue的学习补充

1.Vue路由-404 作用&#xff1a;当路径找不到匹配时&#xff0c;给个提示页面 位置&#xff1a;配在路由最后 语法&#xff1a;path:*&#xff08;任意路径&#xff09;-前面不匹配就命中最后这个 2.Vue路由-模式设置 hash路由&#xff08;默认&#xff09; 例如&#xff…...

vue移动端H5调起手机发送短信(兼容ios和android)

移动端h6页面调起手机发送短信功能&#xff0c;ios和android的兼容写法不一样。 android window.location.href sms:10086?body${encodeURIComponent(Hello, 测试短信发送)} ios window.location.href sms:10086&body${encodeURIComponent(Hello, 测试短信发送)}//或者w…...

spring boot RabbitMq基础教程

RabbitMq 由于RabbitMQ采用了AMQP协议&#xff0c;因此它具备跨语言的特性。任何语言只要遵循AMQP协议收发消息&#xff0c;都可以与RabbitMQ交互。并且RabbitMQ官方也提供了各种不同语言的客户端。 但是&#xff0c;RabbitMQ官方提供的Java客户端编码相对复杂&#xff0c;一般…...

springboot vue 部署至Rocky(Centos)并自启,本文部署是若依应用

概述 1、安装nohup&#xff08;后台进程运行java&#xff09; 2、安装中文字体&#xff08;防止中文乱码&#xff09; 3、安装chrony&#xff08;保证分布式部署时间的一致性&#xff09; 5、安装mysql数据&#xff0c;迁移目录&#xff0c;并授权自启动&#xff1b; 6、安…...

Mysql之增删改查

这篇文章旨在介绍mysql的增删改查中的基本操作 所有命令皆是以分号&#xff08;&#xff1b;&#xff09;结尾。 1.显示命令 在写增的有关命令前&#xff0c;我们更应该知道如何显示&#xff0c;这样有助于更好的检查我们的结果是否正确。 #显示数据库列表 show databases;#…...

【考研数学】矩阵三大关系的梳理和讨论 | 等价、相似、合同

文章目录 引言一、定义二、判别法写在最后 引言 昨天学了矩阵的合同关系&#xff0c;老汤讲义里也列举了三大关系的定义和判别法&#xff0c;方便我们进行区分。但是光看还是难以入脑&#xff0c;为此&#xff0c;我想自己梳理一遍&#xff0c;顺带也复习一下线代之前的所学。…...

在 Amazon SageMaker 上使用 ESMFold 语言模型加速蛋白质结构预测

蛋白质驱动着许多生物过程&#xff0c;如酶活性、分子输运和细胞支持。通过蛋白质的三维结构&#xff0c;可以深入了解蛋白质的功能以及蛋白质如何与其他生物分子相互作用。测定蛋白质结构的实验方法&#xff08;如 X 射线晶体学和核磁共振波谱学&#xff09;既昂贵又耗时。相比…...

node.js知识系列(4)-每天了解一点

目录 11. 异步文件操作文件读取文件写入 12. 包管理器&#xff08;npm&#xff09;13. 子进程14. 事件发射器&#xff08;EventEmitter&#xff09;15. 异步编程和回调16. Node.js 集成测试工具和框架17. Express.js 中间件的 HTTP 请求流程18. 文件上传和验证19. Express.js 中…...

can not remove .unionfs

文件夹下出现unionfs 套娃&#xff0c;无法删除。 处理方式&#xff1a; 需要管理员权限umount之后删除使用fusermount -zu .unionfs &#xff0c;然后再删除。...

微服务 BFF 架构设计

在现代软件开发中&#xff0c;由于程序、团队、数据规模太大&#xff0c;需要把企业的业务能力进行复用&#xff0c;将领域服务剥离&#xff0c;提供通用能力&#xff0c;避免重复建设和代码&#xff1b;另外服务功能的弹性能力不一样&#xff0c;比如定时任务、数据同步明确的…...

零基础学python之元组

文章目录 元组1、元组的应用场景2、定义元组3、元组的常见操作4、总结 元组 目标 元组的应用场景定义元组元组常见操作 1、元组的应用场景 思考&#xff1a;如果想要存储多个数据&#xff0c;但是这些数据是不能修改的数据&#xff0c;怎么做&#xff1f; 答&#xff1a;列…...

11. SpringBoot项目中参数获取与响应

SpringBoot项目中参数获取与响应 1. 程序结构&通信方式 程序结构&#xff1a; C/S &#xff1a; 客户端/服务器端 -Main方法。 -效果炫目、数据相对安全。 -公司成本高&#xff0c;因为要分别开发客户端和服务器端。 B/S&#xff1a; 浏览器端/服务器端 -效果依赖于浏览…...

4+1视图与UML

目录 逻辑视图过程视图开发视图物理视图&#xff08;部署视图&#xff09;用例视图 41视图&#xff0c;即逻辑视图&#xff0c;过程视图&#xff0c;实现视图&#xff0c;部署视图&#xff0c;用例视图。 为什么不用一个视图&#xff1f; 针对多个用户&#xff0c;即终端用户&a…...

没用的知识增加了,尝试用文心实现褒义词贬义词快速分类

尝试用文心实现褒义词贬义词快速分类 一、我的需求二、项目环境搭建千帆SDK安装及使用流程 三、项目实现过程创建应用获取签名调用接口计算向量积总结 百度世界大会将于10月17日在北京首钢园举办&#xff0c;今天进入倒计时五天了。通过官方渠道的信息了解到&#xff0c;这次是…...

AWS SAP-C02教程3--网络资源

架构设计中网络也是少不了的一个环节,而AWS有自身的网络结构和网络产品。本章中将带你看看AWS中不同网络产品,以及计算资源、存储资源等产品在网络架构中处于哪个位置,如何才能让它们与互联网互通、与其它产品互通。下图视图将SAP涉及到网络相关组件在一张图表示出来,图中可…...

【TensorFlow2 之012】TF2.0 中的 TF 迁移学习

#012 TensorFlow 2.0 中的 TF 迁移学习 一、说明 在这篇文章中&#xff0c;我们将展示如何在不从头开始构建计算机视觉模型的情况下构建它。迁移学习背后的想法是&#xff0c;在大型数据集上训练的神经网络可以将其知识应用于以前从未见过的数据集。也就是说&#xff0c;为什么…...

mysql面试题46:MySQL中datetime和timestamp的区别

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL中DATETIME和TIMESTAMP的区别 在MySQL中,DATETIME和TIMESTAMP是两种用于存储日期和时间的数据类型。虽然它们都可以用于存储日期和时间信息…...

【Spring Boot】RabbitMQ消息队列 — RabbitMQ入门

💠一名热衷于分享知识的程序员 💠乐于在CSDN上与广大开发者交流学习。 💠希望通过每一次学习,让更多读者了解我 💠也希望能结识更多志同道合的朋友。 💠将继续努力,不断提升自己的专业技能,创造更多价值。🌿欢迎来到@"衍生星球"的CSDN博文🌿 🍁本…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...