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

杨校老师课堂之基于File类的文件管理器

在日常工作中,经常会遇到批量操作系统文件的事情,通常情况下,只能手动重复的完成批量文件的操作,这样很是费时费力。

本案例要求编写一个文件管理器,实现文件的批量操作。
文件管理器具体功能要求如下:

  • 用户输入指令1,代表“指定关键字检索文件”,此时需要用户输入检索的目录和关键字,系统在用户指定的目录下检索出文件名中包含关键字的文件,并将其绝对路径展示出来。
  • 用户输入指令2,代表“指定后缀名检索文件”,此时需要用户输入检索的目录和后缀名(多个后缀名用逗号分隔),系统在用户指定的目录下检索出指定后缀名的文件,并将其绝对路径展示出来。
  • 用户输入指令3,代表“删除文件/目录”,此时需要用户输入需要删除掉的文件目录,程序执行后会将目录以及目录下的内容全部删除。
  • 用户输入指令4,代表“退出”,即退出该文件管理器程序。
package cn.javabs.cases;import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;public class DocManager {public static void main(String[] args) throws Exception {Scanner sc = new Scanner(System.in);System.out.println("--1:指定关键字检索文件  2:指定后缀名检索文件  "+ "3:删除文件/目录  4:退出--");while (true) {System.out.print("请输入指令:");int command = sc.nextInt();switch (command) {case 1://指定关键字检索文件searchByKeyWorld();break;case 2://指定后缀名检索文件searchBySuffix();break;case 3://删除文件/目录deleteDir();break;case 4://退出exit();break;default:System.out.println("您输入的指令错误!");break;}}}// *********1.指定关键字检索文件*********private static void searchByKeyWorld() {Scanner sc = new Scanner(System.in);System.out.print("请输入要检索的目录位置:");String path = sc.next();//从控制台获取路径File file = new File(path);//判断目录是否存在,是否是目录if (!file.exists() || !file.isDirectory()) {System.out.println(path + " (不是有效目录)");return;}System.out.print("请输入搜索关键字:");String key = sc.next();//获取关键字//在输入目录下获取所有包含关键字的文件路径ArrayList<String> list = FileUtils.listFiles(file, key);for (Object obj : list) {//将路径打印到控制台System.out.println(obj);}}// *********2.指定后缀名检索文件********//private static void searchBySuffix() {Scanner sc = new Scanner(System.in);System.out.print("请输入要检索的目录位置:");String path = sc.next();//从控制台获取路径File file = new File(path);//判断目录是否存在,是否是文件夹if (!file.exists() || !file.isDirectory()) {System.out.println(path + " (不是有效目录)");return;}System.out.print("请输入搜索后缀:");String suffix = sc.next();//获取后缀字符串String[] suffixArray = suffix.split(",");//在输入目录下获取所有指定后缀名的文件路径ArrayList<String> list = FileUtils.listFiles(file, suffixArray);for (Object obj : list) {//将路径打印到控制台System.out.println(obj);}}// *********3.删除文件/目录**********//private static void deleteDir() {Scanner sc = new Scanner(System.in);System.out.print("请输入需要删除的源目录:");String delpath = sc.next();// 从控制台获取源路径File dir = new File(delpath); // 创建一个代表目录的File对象doDelete(dir);}private static void doDelete(File dir) {if (dir.exists()) { // 判断传入的File对象是否存在// 得到File数组File[] files = dir.listFiles(); // 遍历所有的子目录和文件for (File file : files) { if (file.isDirectory()) {doDelete(file); // 如果是目录,递归调用deleteDir()} else {// 如果是文件,直接删除file.delete();}}// 删除完一个目录里的所有文件后,就删除这个目录dir.delete();}}// *********4.退出**********//private static void exit() {System.out.println("您已退出系统,谢谢使用!");System.exit(0);}
}

工具类:

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;public class FileUtils {
/*** 指定关键字检索文件* @param file File对象* @param key  关键字* @return 包含关键字的文件路径*/public static ArrayList<String> listFiles(File file, final String key){// 创建过滤器对象FilenameFilter filter = new FilenameFilter() { // 实现accept()方法public boolean accept(File dir, String name) {File currFile = new File(dir, name);// 如果文件名包含关键字返回true,否则返回falseif (currFile.isFile() && name.contains(key)) {return true;}return false;}};//递归方式获取规定的路径ArrayList<String> arraylist = fileDir(file, filter);return arraylist;}/*** 指定后缀名检索文件* @param file File对象* @param suffixArray 后缀名数组* @return 指定后缀名的文件路径*/public static ArrayList<String> listFiles(File file,final String[] suffixArray) {FilenameFilter filter = new FilenameFilter() { // 创建过滤器对象// 实现accept()方法public boolean accept(File dir, String name) {File currFile = new File(dir, name);if (currFile.isFile()) {for (String suffix : suffixArray) {if (name.endsWith("." + suffix)) {return true;}}}return false;}};//递归方式获取规定的路径ArrayList<String> arraylist = fileDir(file, filter);return arraylist;}/*** 递归方式获取规定的路径* @param dir File对象* @param filter 过滤器* @return 过滤器过滤后的文件路径*/public static ArrayList<String> fileDir(File dir, FilenameFilter filter){ArrayList<String> arraylist = new ArrayList<String>();// 获得过滤后的所有文件数组File[] lists = dir.listFiles(filter); for (File list : lists) {//将文件的绝对路径放到集合中arraylist.add(list.getAbsolutePath());}// 获得当前目录下所有文件的数组File[] files = dir.listFiles();// 遍历所有的子目录和文件for (File file : files) {if (file.isDirectory()) {// 如果是目录,递归调用fileDir()ArrayList<String> every = fileDir(file, filter);arraylist.addAll(every);//将文件夹下的文件路径添加到集合中}}//此时的集合中有当前目录下的文件路径,和当前目录的子目录下的文件路径return arraylist;}
}

相关文章:

杨校老师课堂之基于File类的文件管理器

在日常工作中&#xff0c;经常会遇到批量操作系统文件的事情&#xff0c;通常情况下&#xff0c;只能手动重复的完成批量文件的操作&#xff0c;这样很是费时费力。 本案例要求编写一个文件管理器&#xff0c;实现文件的批量操作。 文件管理器具体功能要求如下&#xff1a; 用…...

java面试算法汇总-数组

数组 [程序一] 两数之和 &#xff1a;给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer,…...

Docker-Mysql主从复制

步骤 1、新建主服务器容器实例3307 docker run -d -p 3307:3306 --privileged=true -v /tmp/mysql_master/log:/var/log/mysql -v /tmp/mysql_master/data:/var/lib/mysql -v /tmp/mysql_master/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root --name mysql-master mys…...

(模拟)1241. 外卖店优先级

目录 题目链接 一些话 流程 套路 ac代码 题目链接 1241. 外卖店优先级 - AcWing题库 一些话 流程 // // 每经过 1 // 个时间单位&#xff0c;如果外卖店没有订单&#xff0c;则优先级会减少 1 // &#xff0c;最低减到 0 // &#xff1b;而如果外卖店有订单&#xff0c;则…...

Linux进程学习【进程地址】

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f38a;每篇一句&#xff1a; 图片来源 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 Perseverance is not a long race; it is many short races one after another…...

系统调用——文件操作相关函数

1.open open, creat - open and possibly create a file or device 打开一个文件&#xff0c;也可能创建一个文件&#xff0c;返回文件描述符 //头文件 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> //接口 int open(const char *pa…...

做互联网自媒体创业的月薪收入真的能过万吗?

搞自媒体创业有前途吗&#xff1f;收入月薪过万是真的吗&#xff1f; 自媒体创业是一种新兴的创业方法&#xff0c;它的远景十分广阔。自媒体创业能够让人们在自己的兴趣爱好和专业范畴上发挥自己的才能&#xff0c;一起也能够获得不错的收入。可是&#xff0c;月薪过万并不是…...

Kubernetes (k8s) 污点(Taint)、容忍介绍、示例

Kubernetes (k8s) 污点&#xff08;Taint&#xff09; 是一种机制&#xff0c;用于标记一个节点&#xff08;Node&#xff09;不可被调度的状态。它可以将一个污点标记添加到节点上&#xff0c;以防止 Pod 被调度到该节点上。污点可以用于实现各种策略&#xff0c;例如分离故障…...

多团队协作构建可观测性

实施 SRE 工程&#xff0c;守护系统的可靠性是一个⻓期的工作&#xff0c;需要开发、测试、运维以及 SRE 整个团队的努力。而可观测性平台天生就是为 SRE 工程服务的&#xff0c;它致力于实现 SLO 目标。建立可观测性不仅仅是运维团队的事情&#xff0c;更是整个开发、测试以及…...

100种思维模型之认知资源思维模型-030

我们常说&#xff0c;一个人永远也赚不到自己认知以外的钱&#xff0c;这话的确很有道理&#xff0c;被无数人所推崇。 由此&#xff0c;不难看出&#xff0c;认知在我们的生活起着多么关键的作用。 你的认知层次越高&#xff0c;范围越广&#xff0c;就意味着你这个人所处的阶…...

c/cpp - 多线程/进程 基础

c/cpp - 多线程/进程 基础1. 概念1.1 程序1.2 任务1.3 多任务1.4 进程1.5 线程1.5 线程/进程应用程序/系统资源并发/并行/同步/异步1. 概念 1.1 程序 代码、指令&#xff0c;静态的 1.2 任务 具体要做的实景&#xff0c;可以是基于进程、或基于线程 1.3 多任务 例如&#xff1…...

第55章 头像图片的前端渲染显示

1 WebApi.Controllers.CustomerController.GetCustomerByToken /// <param name"token">1个指定的令牌字符串。</param> /// <summary> /// 【通过令牌获取用户-无需权限】 /// </summary> /// <remarks> /// 摘要&#xff1a; /// …...

vue2 使用 cesium 【第二篇-相机视角移动+添加模型】

vue2 使用 cesium 【第二篇-相机视角移动添加模型】 搞了一阵子 cesium&#xff0c;小白入门&#xff0c;这东西很牛逼&#xff0c;但是感觉这东西好费劲啊&#xff01;网上资料不多&#xff0c;每个人的用法又不一样&#xff0c;操作起来真的是绝绝子。之前写了一篇 vue2 使用…...

C/C++ 操作ini文件(SinpleIni 跨平台库)

最近在学习时&#xff0c;发现自己还不会操作ini文件&#xff0c;想着以前工作时接触到的项目或多或少都要用到ini文件去保存初始化程序的数据&#xff1b;所以赶紧去网上搜索以下C/C操作ini文件都有些什么库可以玩玩&#xff1b;搜索到有&#xff1a; 1. inih&#xff1a;这是…...

Cadence Allegro 导出Design Rules Check(DRC)Report报告详解

⏪《上一篇》   🏡《上级目录》   ⏩《下一篇》 目录 1,概述2,Design Rules Check(DRC)Report作用3,Design Rules Check(DRC)Report示例4,Design Rules Check(DRC)Report导出方法4.1,方法14.2,方法2B站关注“硬小...

Java的stream流

Java 8中引入的新特性&#xff0c;stream流通过与Lambda表达式结合&#xff0c;采用函数式编程&#xff0c;简化数组、集合操作&#xff0c;提高效率。 我们操作一个集合&#xff0c;就把他看作一个流&#xff0c;整个流依次执行&#xff0c;&#xff08;可以类比为一个管道&a…...

Mybatis_相关配置解析和ResultMap

目录配置解析核心配置文件mybatis-config.xml 系统核心配置文件environments元素子元素节点&#xff1a;environmentmappers元素Mapper文件Properties优化typeAliases优化その他生命周期和作用域&#xff08;Scope&#xff09;方法作用域应用作用域方法作用域ResultMap提出问题…...

Python量化入门:利用中长期RSI寻找趋势拐点,抓大放小,蹲一个大机会!

一、RSI的原理 1. RSI简介 股票的涨跌说白了就是多空博弈造成的,多方力量更强则股票价格上涨,空方力量更强则股票价格下跌。那么我们如何来衡量股票的多空力量强弱呢? 上个世纪70年代,威尔斯威尔得发表了相对强弱指标,即我们常说的RSI(Relative Strength Index),RSI…...

案例14-代码结构逻辑混乱,页面设计不美观

目录 目录 一&#xff1a;背景介绍 二&#xff1a;思路&方案 三&#xff1a;过程 问题1&#xff1a;代码可读性差&#xff0c;代码结构混乱 问题2&#xff1a; 代码逻辑混乱&#xff0c;缺乏封装的意识 问题3&#xff1a;美观问题&#xff1a;问题和图标没有对应上 四…...

弱监督参考图像分割:Learning From Box Annotations for Referring Image Segmentation论文阅读笔记

弱监督参考图像分割&#xff1a;Learning From Box Annotations for Referring Image Segmentation论文阅读笔记一、Abstract二、引言三、相关工作A、全监督参考图像分割B、基于 Box 的实例分割C、带有噪声标签的学习四、提出的方法A、概述B、伪标签生成目标轮廓预测Proposal 选…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...