当前位置: 首页 > 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博文🌿 🍁本…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...