首页 文章 精选 留言 我的

精选列表

搜索[在线课堂],共10000篇文章
优秀的个人博客,低调大师

杨老师课堂_Java核心技术下之控制台模拟文件管理器案例

背景需求介绍: 编写一个模拟文件管理器的程序,实现控制台对文件和文件夹的管理操作。 要求在此程序中:当用户输入指令 1 时,代表“指定关键字检索文件”,此时需要用户输入检索的目录和关键 字,系统在用户指定的目录下检索出文件名中包含关键字的文件,并将其绝对路径展现出来; 指定 2 时,代表“指定后缀名检索文件”,此时需要用户输入检索的目录和后缀名,系统在用 户指定的目录下检索出指定后缀名的文件,并将其绝对路径展现出来。 指令 3 代表“复制文件/目录”,此时需要用户输入源目录和目标目录,程序执行后,或将与原 目录下的内容复制到目标目录下, 指令 4 代表“退出”即退出该系统。 预览效果图: 思路解析: 案例分析: (1)、根据任务介绍和运行结果分析可知,首先需要创建一个文件管理器内,可以在类中使用 while 循环实现控制台中的操作之间的多次输入,并使用 switch 语句,根据控制台输入的指令来判断执行什么操作。 (2)、执行指令 1 时,代表指定关键字检索文件,即在目录下查找包含关键字的文件,执行时,先要从控制台获取目录和关键字,然后将其传到后台的方法中,后台可将传入关键字利用过滤器制定成“规则”,通过递归的方式遍历文件夹,在每个子文件下调用过滤器来获取符合规则的文件路径的集合,并将集合返回,最后打印出来。 (3)、执行指令 2 时,代表指定后缀名检索文件系在目录下查找名称结尾是指定后缀的文件,执行时可以先从控制台获取目录和后缀名,然后将后缀名拆分成数组,并将数组和目录传到后台方法中,后台可用过滤器,将后缀名数组循环遍历,制定成“规则”,通过递归的方式,遍历文件夹,在每个子文件夹下调用过滤器来获取符合规则的文件路径的集合,并将集合返回,最后打印出来。 (4)、执行指令 3 时,代表将原目录的内容复制到目标目录中。执行时可以先从控制台获取源目录和目标目录,然后将其传入后台,后台主要是通过递归的方法,执行文件和文件夹复制的,每次调用此方法时,首先会获取当前目录下的文件和文件夹列表,然后循环列表,并判断当前元素是文件还是文件夹,如果是文件夹就利用 File 类中的 mkdirs()方法在目标目录中创建此文件夹,在调用自身;如果是文件,由于不一定是纯文本文件,所以可以采用字节流将文件写入目标目录。 (5)、执行指令 4,执行退出该程序操作,该操作可以使用 System.exit(0)完成实现; 示例代码: package cn.javabs.iocase; import java.io.File; import java.util.ArrayList; import java.util.Scanner; /** * * @author Mryang * */ public class DocumentManager { public static void main(String[] args) throws Exception { Scanner scan = new Scanner(System.in); System.out.println("---1:指定关键字检索文件 2:指定后缀名检索文件 3:赋值文件/目录 4:退出----"); while (true) { System.out.println("请输入命令:"); int command = scan.nextInt(); switch (command) { case 1: searchByKeyWorld(); break; case 2: searchBySuffix(); break; case 3: copyDirectory(); case 4: exit(); break; default: System.out.println("您输入的指令错误!"); break; } } } /** * 指定后缀名检索文件 */ private static void searchBySuffix() { Scanner scan = new Scanner(System.in); System.out.print("请输入您要检索的目录的位置"); String path = scan.next(); File file = new File(path); if (!file.exists() || !file.isDirectory()) { System.out.println(path + "(不是有效目录)"); return; } System.out.println("您输入搜索后缀:"); String suffix = scan.next(); String[] suffixArray = suffix.split(","); ArrayList<String> list = FileUtils.listFiles(file, suffixArray); for (Object obj : list) { System.out.println(obj); } } /** * 退出 */ private static void exit() { System.out.println("您已退出系统,谢谢使用"); System.exit(0); } /** * 复制文件/目录 * * @throws Exception */ private static void copyDirectory() throws Exception { Scanner scan = new Scanner(System.in); System.out.print("请输入源目录"); String srcDirectory = scan.next(); File srcFile = new File(srcDirectory); if (!srcFile.exists() || !srcFile.isDirectory()) { System.out.println("无效目录!"); return; } System.out.print("请输入目标位置:"); String destDirectory = scan.next(); File destFile = new File(destDirectory); if (!destFile.exists() || !destFile.isDirectory()) { System.out.println("无效位置!"); return; } FileUtils.copySrcPathToDestPath(srcFile, destFile); } /** * 指定关键字检索文件 */ private static void searchByKeyWorld() { Scanner scan = new Scanner(System.in); System.out.print("请输入您要检索的目录的位置"); String path = scan.next(); File file = new File(path); if (!file.exists() || !file.isDirectory()) { System.out.println(path + "(不是有效目录)"); return; } System.out.println("您输入搜索关键字:"); String key = scan.next(); ArrayList<String> list = FileUtils.listFiles(file, key); for (Object obj : list) { System.out.println(obj); } } } 工具类: package cn.javabs.iocase; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.util.ArrayList; public class FileUtils { public static ArrayList<String> listFiles(File file, final String[] suffixArray) { FilenameFilter filter = new FilenameFilter() { @Override 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 srcFile * @param desFile * @throws Exception */ public static void copySrcPathToDestPath(File srcFile, File destFile) throws Exception { File[] files = srcFile.listFiles(); for (int i = 0; i < files.length; i++) { File copiedFile = new File(destFile, files[i].getName()); if (files[i].isDirectory()) { if (!copiedFile.mkdirs()) { System.out.println("无法创建 + copiedFile"); return; } copySrcPathToDestPath(files[i], copiedFile); } else { FileInputStream input = new FileInputStream(files[i]); FileOutputStream output = new FileOutputStream(copiedFile); byte[] buffer = new byte[1024]; int len = 0; while ((len = input.read(buffer)) != -1) { output.write(buffer, 0, len); } input.close(); output.close(); } } } /** * 指定关键字检索文件 * * @param file * @param key * @return */ public static ArrayList<String> listFiles(File file, final String key) { FilenameFilter filter = new FilenameFilter() { @Override public boolean accept(File dir, String name) { File currFile = new File(dir, name); if (currFile.isFile() && name.contains(key)) { return true; } return false; } }; // 递归当时获取规定的路径 ArrayList<String> arraylist = fileDir(file, filter); return arraylist; } /** * * @param dir * @param filter * @return */ private 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()) { ArrayList<String> every = fileDir(file, filter); arraylist.addAll(every); } } return arraylist; } } 作者: 杨校 出处:https://www.cnblogs.com/xiaoxiao5016/ 分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(397583050@qq.com)咨询。

优秀的个人博客,低调大师

在线答题系统 WTS 1.0.2 发布,可查看答题卡详情

当前版本v1.0.2 更新内容: 优化:通过内存队列保存提交的答案,也可以配置为数据库中缓存答案 功能:允许用户查看原始试卷 功能:答题室的答题权限,支持通过组织机构和岗位绑定 bugfix:移动端提交答卷时显示完成题数在队列中的沒有加载出来 bugfix:移动端不显示答卷查询按钮(移动端只显示成绩不显示答卷)

优秀的个人博客,低调大师

MeEdu v4.9.15 版本上线,在线网校解决方案

MeEdu 4.9.15 发布,更新内容如下: 新增:视频素材库分类 新增:录播课评论审核机制 新增:录播课课时评论审核机制 新增:录播课是否允许评论开关 新增:录播课课时是否允许评论开关 新增:录播课评论显示地区 新增:录播课课时评论显示地区 新增:后台系统审计日志清空按钮 新增:学员导入新增昵称字段 修复:录播课批量导入学员未统计订阅人数的bug 修复:视频后缀mp4非小写无法上传的bug 优化:新增学员的昵称、头像改为可选字段 新增:微信H5支付 优化:重构支付业务逻辑 优化:[API]重构图片、课件存储 新增:[API]Redis数据库的env配置项 优化:[API]删除云片短信服务 优化:[API]重构安装程序界面 优化:[API]重构微信公众号的扫码登录 优化:[API]删除微信公众号消息回复 优化:[API]删除微信公众号菜单编辑 优化:[API]腾讯云点播的视频播放稳定性 新增:[API]阿里云点播域名配置 新增:[API]阿里云点播播放域名key自动化配置 新增:[API]阿里云点播播放域名的跨域配置自动化配置 新增:[API]阿里云点播回调自动化配置 新增:[API]腾讯云点播域名配置 新增:[API]腾讯云点播播放域名key自动化配置 新增:[API]腾讯云点播回调自动化配置 新增:[后台]运行日志下载 修复:[API]全文搜索默认值读取http://localhost:7700的BUG 修复:[H5]短信验证登录成功之后先跳转到登录页面再跳转到我的页面的BUG 修复:[H5]短信验证码登录失败页面自动跳回登录界面的BUG 修复:[H5]短信登录图形验证码输出错误按钮loading状态未重置的BUG 修复:[H5]密码登录账号密码按钮loading状态未重置的BUG 修复:[H5]当录播课下章节视频为空点击目录会导致页面崩溃的BUG 修复:[后台]运行日志不自动换行导致页面溢出 修复:[后台]token过期自动跳转到登录页面 修复:[后台]修复后台装修录播课列表和录播课课程的链接错误的BUG 修复:[PC]录播课分类过长导致样式溢出的BUG 修复:[PC]短信注册使用手机号登录scene的BUG 修复:[其它]docker-compose运行方式下默认上传文件大小改为10M 优化:[API]系统根据配置的API地址决定是否使用https协议(此项更新解决代理部署下的URL生成协议为HTTP的问题) 优化:[API]CORS跨域的缓存时间提升到15天 优化:[API]Redis链接错误的信息提示 优化:[API]移除mobiledetect/mobiledetectlib依赖包 优化:[API]移除七牛云的支持 优化:[API]系统处于维护中时抛出异常错误的友好返回 优化:[API]移除app.debug的配置 优化:[API]重命名网站名配置为meedu.system.name 优化:[全端口]课程附件下载重构提升了安全性 Github:https://github.com/Qsnh/meedu Gitee:https://gitee.com/myteng/MeEdu 官网:https://meedu.vip

优秀的个人博客,低调大师

MeEdu v4.9.10 版本上线,在线网校解决方案

MeEdu 4.9.10 发布,更新内容如下: 新增:从环境变量读取配置(meilisearch) 新增:会员服务协议-购买VIP会员需要同意此协议 新增:后台-程序运行日志的查看(最新1000行的laravel.log日志内容) 新增:一次性的初始化管理员账号命令(用于docker容器部署首次初始化数据) 修复:反向代理部署等情况下url,route等函数返回地址中域名使用的是内网host的bug 修复:删除学员的录播课观看记录未清空子课时的学习记录bug 修复:单元测试报错 修复:Window操作系统执行docker-compose up -d无法运行meedu容器 修复:小屏幕设备添加管理角色时无法全部查看和选择权限 优化:docker-compose镜像替换为国内镜像源 优化:提升会员、优惠码、公众号新建、编辑的交互 优化:选择图片组件样式优化 优化:优化后台界面的异常处理 移除:优惠码奖励字段(此字段早已废弃) Github:https://github.com/Qsnh/meedu Gitee:https://gitee.com/myteng/MeEdu 官网:https://meedu.vip

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册