Hutool实现IO相关操作IOUtilFIleUtilFileTypeUtil等操作三
今日分享
每天分享技术实战干货,技术在于积累和收藏,希望可以帮助到您。
架构开源地址:https://gitee.com/msxy
评论转发Hutool概述
IO的操作包括 读 和 写 ,应用场景包括网络操作和文件操作。IO操作在Java中是一个较为复杂的过程,我们在面对不同的场景时,要选择不同的 InputStream 和 OutputStream 实现来完成这些操作。而如果想读写字节流,还需要 Reader 和 Writer 的各种实现类。这些繁杂的实现类,一方面给我我们提供了更多的灵活性,另一方面也增加了复杂性。 IO封装
io包的封装主要针对流、文件的读写封装,主要以工具类为主,提供常用功能的封装,这包括: IoUtil 流操作工具类 FileUtil 文件读写和操作的工具类。 FileTypeUtil 文件类型判断工具类 WatchMonitor 目录、文件监听,封装了JDK1.7中的WatchService ClassPathResource 针对ClassPath中资源的访问封装 FileReader 封装文件读取 FileWriter 封装文件写入 IO工具类-IoUtil
流的读写可以总结为从输入流读取,从输出流写出,这个过程我们定义为 拷贝 。这个是一个基本过程,也是文件、流操作的基础。 /** * 文档拷贝 */ @Test public void copy(){ BufferedInputStream in = FileUtil.getInputStream("D:hometest.txt"); BufferedOutputStream out = FileUtil.getOutputStream("D:hometest2.txt"); long copySize = IoUtil.copy(in, out, IoUtil.DEFAULT_BUFFER_SIZE); } 文件工具类-FileUtills 列出目录和文件 touch 创建文件,如果父目录不存在也自动创建 mkdir 创建目录,会递归创建每层目录 del 删除文件或目录(递归删除,不判断是否为空),这个方法相当于Linux的delete命令 copy 拷贝文件或目录这些方法提供了人性化的操作,例如 touch 方法,在创建文件的情况下会自动创建上层目录
列出目录和文件 /** * 列出目录和文件 */ @Test public void ls(){ File[] files = FileUtil.ls("D:home"); for (File f:files) { System.out.println(f.getName()); } }
创建文件/** * 创建文件,如果父目录不存在也自动创建 */ @Test public void touch(){ File file = FileUtil.touch("D:homeqingfeng.txt"); System.out.println(file.getName()); }
创建目录/** * 创建目录,会递归创建每层目录 */ @Test public void mkdir(){ File file = FileUtil.mkdir("D:homeqingfengdata"); System.out.println(file.getName()); }
删除文件或目录/** * 删除文件或目录(递归删除,不判断是否为空),这个方法相当于Linux的delete命令 */ @Test public void del(){ boolean bol = FileUtil.del("D:homeqingfengdata"); System.out.println(bol); }
FileUtil拷贝 /** * 文件拷贝 */ @Test public void copyFile(){ File path = FileUtil.copy(new File("D:homeqingfeng.txt"),new File("D:homeqingfeng123.txt"),true); System.out.println(path); }文件类型判断-FileTypeUtil
在文件上传时,有时候我们需要判断文件类型。但是又不能简单的通过扩展名来判断(防止恶意脚本等通过上传到服务器上),于是我们需要在服务端通过读取文件的首部几个二进制位来判断常用的文件类型。 /** * 获取文件类型 */ @Test public void getFileType(){ File file = FileUtil.file("D:homeqingfeng.txt"); String type = FileTypeUtil.getType(file); System.out.println(type); } 文件读取-FileReader
FileReader提供了以下方法来快速读取文件内容: readBytes readString readLines 同时,此类还提供了以下方法用于转换为流或者BufferedReader: getReader getInputStream /** * 文件读取-FileReader */ @Test public void FileReader(){ //默认UTF-8编码,可以在构造中传入第二个参数做为编码 FileReader fileReader = new FileReader("D:homeqingfeng.txt"); String result = fileReader.readString(); System.out.println(result); // byte[] readBytes = fileReader.readBytes(); // for (Byte str:readBytes) { // System.out.println(str); // } List readLines = fileReader.readLines(); for (String str:readLines) { System.out.println(str); } } 文件写入-FileWriter
此类提供了: getOutputStream getWriter getPrintWriter 这些方法用于转换为相应的类提供更加灵活的写入操作。 /** * 文件写入-FileWriter */ @Test public void FileWriter(){ FileWriter writer = new FileWriter("D:homeqingfeng.txt"); writer.write("test"); writer.append("123"); } 文件监听-WatchMonitor
在Hutool中, WatchMonitor 主要针对JDK7中 WatchService 做了封装,针对文件和目录的变动(创建、更新、删除)做一个钩子,在 Watcher 中定义相应的逻辑来应对这些文件的变化。
WatchMonitor 提供的事件有: ENTRY_MODIFY 文件修改的事件 ENTRY_CREATE 文件或目录创建的事件 ENTRY_DELETE 文件或目录删除的事件 OVERFLOW 丢失的事件这些事件对应 StandardWatchEventKinds 中的事件。 /** * 文件监控-WatchMonitor */ public static void main(String[] args) { File file = FileUtil.file("D:homeqingfeng.txt"); //这里只监听文件或目录的修改事件 WatchMonitor watchMonitor = WatchMonitor.create(file, WatchMonitor.ENTRY_MODIFY); watchMonitor.setWatcher(new Watcher(){ @Override public void onCreate(WatchEvent<?> event, Path currentPath) { Object obj = event.context(); System.out.println("创建:"+currentPath+"-> "+obj); } @Override public void onModify(WatchEvent<?> event, Path currentPath) { Object obj = event.context(); System.out.println("修改:"+currentPath+"-> "+obj); } @Override public void onDelete(WatchEvent<?> event, Path currentPath) { Object obj = event.context(); System.out.println("删除:"+currentPath+"-> "+obj); } @Override public void onOverflow(WatchEvent<?> event, Path currentPath) { Object obj = event.context(); System.out.println("Overflow:"+currentPath+"-> "+obj); } }); //设置监听目录的最大深入,目录层级大于制定层级的变更将不被监听,默认只监听当前层级目录 watchMonitor.setMaxDepth(3); //启动监听 watchMonitor.start(); }ClassPath资源访问
在Java编码过程中,我们常常希望读取项目内的配置文件,按照Maven的习惯,这些文件一般放在项目的 src/main/resources 下,读取的时候使用: /** * 读取配置的资源文件 * @throws IOException */ @Test public void ClassPathResource() throws IOException { ClassPathResource resource = new ClassPathResource("test.properties"); Properties properties = new Properties(); properties.load(resource.getStream()); System.out.println(properties); }
淡马锡增持Robinhood沽清Uber腾讯音乐新加坡国营投资机构淡马锡(Temasek)向美国SEC提交的文件披露,淡马锡上季增持多只在美国上市的消费相关股份,包括东南亚网约车平台Grab美国网上证券商Robinhood零售商
汉字转拼音ChinesetoPinyin从网上找的资料,记得以前在C中曾经用过这类资料,保存下来以后再进一步测试和应用。一引入maven依赖dependencygroupIdcom。belerwebgroupIdpiny
如果被困电梯怎么办?开门见山地说吧,如果被困电梯,我们应该采取如下措施首先请保持镇定。电梯槽都有防坠安全装置,会牢牢夹住电梯两旁的钢轨。只要电梯没有解体,那么这个狭小的空间将会成为暂时的庇护所。然后立
怎样下载头条中的视频音乐?需要注意哪些问题?首先感谢邀请!关于如何下载头条中的视频音乐,我曾经回答过类似的提问,今天再次作答,并加以完善和补充方法一通过今日头条APP下载1在播放音乐视频的页面中,点击右下角的分享按钮,朝右滑
大家都去哪个交友网站?我之前用的IUDating和我老婆认识的,上面都是些真是的单身人士可以在线翻译180余个国家语言。满意我的回答吗?如果满意请采纳下交友软件的话,放在以前,最火的社交平台估计是百合网
年薪4亿的中国最贵科技CEO是谁?我们对高管薪资做了个排行科股头条虎年开年,有关财富和自由的话题热度不减。市值均值超过百亿的科技巨头们,如何给高管发年薪?中国科技公司的高管薪资水平,对于大多数投资人而言也是谜一般的存在。去年,联想CEO杨元庆1。
网易QQ之外,听音乐的第三个选择最近换了手机需要重新下载个音乐软件用来听歌,但在下载的时候出现了犹豫。以前基本都是用网易云音乐,但网易在最近一年的更新后感觉越来越不靠谱了。增加了大量用不到的功能,导致软件初始大小
利用变更数据采集(CDC)同步数据库(2)这是关于变更数据采集(CDC)系列的第二部分。在这篇文章中,让我们讨论CDC的使用案例,并看看有哪些工具可以帮助你把CDC添加到你的架构中。变更数据采集有助于实现事件驱动的应用架构
免费通用数据库工具DBeaver,替代收费的Navicat官网介绍通用数据库工具免费的多平台数据库工具,适用于开发人员数据库管理员分析师和所有需要使用数据库的人。支持所有流行的数据库MySQLPostgreSQLSQLiteOracleD
华为很给力,鸿蒙Os35000mAh,16512G大存储自从美国修改规则后,大家会看到华为手机业务的更新速度十分缓慢,而且据相关数据还显示,华为手机的整体销量还出现了严重下滑状态,虽然目前还能取得国内销量第四名的好成绩,但华为海思麒麟手
错过AMD前女友,英特尔宣布54亿美元收购Tower半导体IT之家2月15日消息,去年7月,华尔街日报称知情人士表示,半导体巨头英特尔正在考虑以300亿美元(约2000亿人民币)的价格收购美国晶圆代工厂商格芯(GlobalFoundrie