前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring -- 常用的文件工具类

Spring -- 常用的文件工具类

作者头像
屈定
发布2020-02-10 17:22:59
2K0
发布2020-02-10 17:22:59
举报
文章被收录于专栏:屈定‘s Blog屈定‘s Blog

Spring几乎是当前Java后端项目必备框架之一,其内部有着大量的工具类,了解并熟练使用这些工具类能够节省不少的时间,本文对Spring中文件操作相关工具类进行汇总,希望对日常开发有所帮助。

字节流复制工具:StreamUtils

该工具类主要针对InputStreamOutputStreambyte[]String之间相互转换进行一层封装,以org.springframework.util.StreamUtils#copyToString方法为例,其内部通过StringBuilder作为数据接收容器,写入对应的byte[],最后再输出为String。

清单1: StreamUtils拷贝源码

代码语言:javascript
复制
public static String copyToString(@Nullable InputStream in, Charset charset) throws IOException {
		if (in == null) {
			return "";
		}
        // 接收输出
		StringBuilder out = new StringBuilder();
        // 准备读取相关啊流
		InputStreamReader reader = new InputStreamReader(in, charset);

		char[] buffer = new char[BUFFER_SIZE];
		int bytesRead = -1;
        // 边读边写
		while ((bytesRead = reader.read(buffer)) != -1) {
			out.append(buffer, 0, bytesRead);
		}
		return out.toString();
	}

文件复制工具类:FileCopyUtils

该工具类和StreamUtils高度相似,在StreamUtils功能基础上提供了直接对文件的操作copy(File in, File out),本质方式还是Stream的字节流拷贝。

文件系统操作类:FileSystemUtils

该工具类主要提供目录级别的文件删除,以及拷贝能力,其内部的能力基本是Files该JDK工具类提供。

字节流:FastByteArrayOutputStream

用于替代java.io.ByteArrayOutputStream的类,针对ByteArrayOutputStream类,其内部基于数组实现,当写入数据庞大时,其扩容操作就会很频繁,扩容会先创建更大的数组,然后把老的数据拷贝进去,再把要写的数据追加进去。

针对FastByteArrayOutputStream,其实现理念是使用链表LinkedList<byte[]> buffers拼接数组,达到无数组拷贝的效果,每次容量不够时,则直接创建新的数组,然后追加到链表尾节点,类似下图,整个字节流尾123456789,对应到FastByteArrayOutputStream则为4段数组。

在Netty中的CompositeByteBuf实现原理与其类似,其本质是组合设计模式思想,有兴趣可以参考我的另一篇文章 设计模式–组合模式的思考

清单2: FastByteArrayOutputStream原理

资源访问类:ResourceUtils

资源访问基本是基于URL协议格式来定制,比如访问文件为file:,访问jar为jar:,该工具类提供的就是根据这些协议去访问对应文件以及判断文件类型的能力,最终会调用java.io.File#File(java.lang.String)构造方法构造出对应的文件。

序列化操作:SerializationUtils

该工具类对基本序列化,反序列化操作工具化封装。本质是ObjectOutputStreamObjectInputStream两个类的的写入与读取能力。

统一资源访问:Resource

Spring中使用Resource接口统一了不同类型资源的访问,并提供了诸多实现类,可以便捷的加载底层的不同资源,常用的如以下列表:

  • FileSystemResource:本地文件访问
  • FileUrlResource:基于URL协议的文件访问
  • ClassPathResource:ClassPath下文件
  • ServletContextResource:web目录下文件

Ant-style资源解析:PathMatchingResourcePatternResolver

PathMatchingResourcePatternResolver是Spring提供的Ant-style路径解析工具,该方法解析后能够返回对应的Resource,达到批量获取资源的情况,比如在Mybatis框架中,需要批量获取对应的xml文件,则可以按照如下示例获取:

清单3: 利用resouces获取mybatis文件

代码语言:javascript
复制
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
     factoryBean.setVfs(SpringBootVFS.class);
     PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
     Resource[] shorturlResources = resolver.getResources("cn/mrdear/shorturl/repository/tinybiz/tunnel/**/*.xml");
     // 放入mapper文件
     factoryBean.setMapperLocations(shorturlResources);

properties资源访问:PropertiesLoaderUtils

PropertiesLoaderUtils该工具类提供了Resource与properties之间的转换合并能力。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 字节流复制工具:StreamUtils
  • 文件复制工具类:FileCopyUtils
  • 文件系统操作类:FileSystemUtils
  • 字节流:FastByteArrayOutputStream
  • 序列化操作:SerializationUtils
  • 统一资源访问:Resource
  • Ant-style资源解析:PathMatchingResourcePatternResolver
  • properties资源访问:PropertiesLoaderUtils
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档