首页 > 其他分享 >Spring应用最常用的工具类汇总

Spring应用最常用的工具类汇总

时间:2023-12-26 18:01:25浏览次数:34  
标签:文件 常用 resource name Spring 汇总 new Resource String

文件资源访问

假设有一个文件地址位于 Web 应用的类路径下,您可以通过以下方式对这个文件资源进行访问:

  • FileSystemResource 以文件系统绝对路径的方式进行访问;
  • ClassPathResource 以类路径的方式进行访问;
  • ServletContextResource 以相对于 Web 应用根目录的方式进行访问。
  • ResourceUtils 它支持“classpath:”和“file:”的地址前缀,它能够从指定的地址加载文件资源,常用方法:getFile()

示例:

// 从Web Context下的WEB-INF路径下读取name.txt资源
WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
ServletContext servletContext = webApplicationContext.getServletContext();
//ServletContextResource resource = new ServletContextResource(servletContext, "WEB-INF/name.txt");

// 绝对路径
//FileSystemResource resource = new FileSystemResource("D:\\ideawork\\springboot-samples\\changyong\\src\\main\\resources\\name.txt");
// 类路径
ClassPathResource resource = new ClassPathResource("name.txt");
// 获取文件名
System.out.println("resource.getFileName = " + resource.getFilename());
// 获取文件描述
System.out.println("resource.getDescription = " + resource.getDescription());
// 获取文件内容
//File file = ResourceUtils.getFile("classpath:name.txt");
File file = ResourceUtils.getFile("file:D:\\ideawork\\springboot-samples\\changyong\\src\\main\\resources\\name.txt");
InputStream in = new FileInputStream(file);
//InputStream in = resource.getInputStream();
byte[] b = new byte[1024];
while (in.read(b) != -1) {
    System.out.println(new String(b));
}

本地化文件资源 LocalizedResourceHelper

本地化文件资源是一组通过本地化标识名进行特殊命名的文件,Spring 提供的 LocalizedResourceHelper 允许通过文件资源基名和本地化实体获取匹配的本地化文件资源并以 Resource 对象返回。假设在类路径的 i18n 目录下,拥有一组基名为 message 的本地化文件资源。

LocalizedResourceHelper lrHalper = new LocalizedResourceHelper();
// ① 获取对应美国的本地化文件资源
Resource msg_us = lrHalper.findLocalizedResource("i18n/message", ".properties", Locale.US);
// ② 获取对应中国大陆的本地化文件资源
Resource msg_cn = lrHalper.findLocalizedResource("i18n/message", ".properties", Locale.CHINA);

文件操作 FileCopyUtils

FileCopyUtils,它提供了许多一步式的静态操作方法,能够将文件内容拷贝到一个目标 byte[]、String 甚至一个输出流或输出文件中。

示例:

Resource res = new ClassPathResource("conf/file1.txt");
// ① 将文件内容拷贝到一个 byte[] 中
byte[] fileData = FileCopyUtils.copyToByteArray(res.getFile());
// ② 将文件内容拷贝到一个 String 中
String fileStr = FileCopyUtils.copyToString(new FileReader(res.getFile()));
// ③ 将文件内容拷贝到另一个目标文件
FileCopyUtils.copy(res.getFile(),
                   new File(res.getFile().getParent()+ "/file2.txt"));

// ④ 将文件内容拷贝到一个输出流中
OutputStream os = new ByteArrayOutputStream();
FileCopyUtils.copy(res.getInputStream(), os);

属性文件操作 PropertiesLoaderUtils

通过 java.util.Properties的load(InputStream inStream) 方法从一个输入流中加载属性资源。Spring 提供的 PropertiesLoaderUtils 允许您直接通过基于类路径的文件地址加载属性资源。

示例:

// ① jdbc.properties 是位于类路径下的文件
Properties props = PropertiesLoaderUtils.loadAllProperties("jdbc.properties");
  • static Properties loadProperties(Resource resource) -->从 Resource 中加载属性
  • static void fillProperties(Properties props, Resource resource)-->将 Resource 中的属性数据添加到一个已经存在的 Properties 对象中。

特殊编码的资源 EncodedResource

当您使用 Resource 实现类加载文件资源时,它默认采用操作系统的编码格式。如果文件资源采用了特殊的编码格式(如 UTF-8),则在读取资源内容时必须事先通过 EncodedResource 指定编码格式,否则将会产生中文乱码的问题。

Resource res = new ClassPathResource("conf/file1.txt");
// ① 指定文件资源对应的编码格式(UTF-8)
EncodedResource encRes = new EncodedResource(res,"UTF-8");
String content  = FileCopyUtils.copyToString(encRes.getReader());

WebApplicationContextUtils 

WebApplicationContextUtils 工具类获取 WebApplicationContext 对象

WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);

我们也可以通过WebApplicationContext获取ServletContext:

WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
ServletContext servletContext = webApplicationContext.getServletContext();

WebUtils

  • getCookie(HttpServletRequest request, String name) 获取 HttpServletRequest 中特定名字的 Cookie 对象。如果您需要创建 Cookie, Spring 也提供了一个方便的 CookieGenerator 工具类
  • getSessionAttribute(HttpServletRequest request, String name) 获取 HttpSession 特定属性名的对象,否则您必须通过 request.getHttpSession.getAttribute(name) 完成相同的操作
  • getRequiredSessionAttribute(HttpServletRequest request, String name) 和上一个方法类似,只不过强制要求 HttpSession 中拥有指定的属性,否则抛出异常;
  • getSessionId(HttpServletRequest request) 获取 Session ID 的值;void exposeRequestAttributes(ServletRequest request, Map attributes) 将 Map 元素添加到 ServletRequest 的属性列表中,当请求被导向(forward)到下一个处理程序时,这些请求属性就可以被访问到了;

中文乱码过滤器 CharacterEncodingFilter 

通过表单向服务器提交数据时,一个经典的问题就是中文乱码问题。虽然我们所有的 JSP 文件和页面编码格式都采用 UTF-8,但这个问题还是会出现。解决的办法很简单,我们只需要在 web.xml 中配置一个 Spring 的编码转换过滤器就可以了。

请求跟踪日志过滤器 ServletContextRequestLoggingFilter

在日志级别为 DEBUG 时才会起作用。

请求工具类 ServletRequestUtils

//取请求参数的整数值
public static Integer getIntParameter(ServletRequest request, String name)
public static int getIntParameter(ServletRequest request, String name, int defaultVal)  //单个值
public static int[] getIntParameters(ServletRequest request, String name) //数组

还有譬如long、float、double、boolean、String的相关处理方法。

目录复制 FileSystemUtils 

递归复制、删除一个目录。

标签:文件,常用,resource,name,Spring,汇总,new,Resource,String
From: https://www.cnblogs.com/xfeiyun/p/17898253.html

相关文章

  • 浅聊springboot的启动流程
    前言本文会对Springboot启动流程进行详细分析。但是请注意,Springboot启动流程是Springboot的逻辑,请千万不要将Springboot启动流程相关逻辑与Spring的相关逻辑混在一起,比如把Spring的bean生命周期的逻辑混在Springboot启动流程中,那么整个体系就复杂且混乱了。所以本文仅重点关注Spri......
  • SpringBoot实现热部署详解
    前言SpringBoot热部署是一种开发时极为有用的功能,它能够让开发人员在代码修改后无需手动重启应用程序就能立即看到变化的效果。以下是使用SpringBoot热部署的几个主要原因:1.提高开发效率热部署使开发人员能够更快地验证和测试他们的代码更改。无需手动重启应用程序,每次修改后只需......
  • springboot自动部署脚本
    #!/bin/sh##javaenvexportJAVA_HOME=/usr/local/jdk/jdk1.8.0_101exportJRE_HOME=$JAVA_HOME/jreAPI_NAME=apiJAR_NAME=$API_NAME\.jar#PID代表是PID文件PID=$API_NAME\.pid#使用说明,用来提示输入参数usage(){echo"Usage:sh执行脚本.sh[start|stop|re......
  • SpringBoot集成多个RabbitMq(多个MQ链接)
    ##2023年12月16日20:25:36 项目中使用RabbitMQ作为应用间信息互通,本次梳理下关于MQ的使用。1、引入依赖<!--引入依赖,使用v2.5.6版本--><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot......
  • 【干货】Windows测试拉流工具及操作步骤大汇总
    关于技术的文章小编给大家分享过很多,今天再给大家分享一点干货:Windows系统中可以测试拉流的工具汇总,感兴趣的朋友可以进行深入了解哦。1、EasyStreamClientTool工具该工具在easynvr目录下,进入下图该目录下:随后在路径窗口输入cmd,回车,进入命令行;输入拉流命令,例:EasyStrea......
  • 基于SpringBoot+Vue的毕业设计系统的开发设计实现(源码+lw+部署文档+讲解等)
    (文章目录)前言:heartpulse:博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌:heartpulse:......
  • Spring MVC 源码分析 - 一个请求的旅行过程
    在上一篇《WebApplicationContext容器的初始化》文档中分析了SpringMVC是如何创建两个容器的,其中创建RootWebApplicationContext 后,调用其refresh()方法会触发刷新事件,完成SpringIOC初始化相关工作,会初始化各种SpringBean到当前容器中,该系列文档暂不分析我们先来了解一......
  • Spring学习记录之Spring对IoC的实现
    Spring学习记录之Spring对IoC的实现前言这篇文章是我第二次学习b站老杜的spring相关课程所进行的学习记录,算是对课程内容及笔记的二次整理,以自己的理解方式进行二次记录,其中理解可能存在错误,欢迎且接受各位大佬们的批评指正;关于本笔记,只是我对于相关知识遗忘时快速查阅了解使......
  • 浅聊SpringCloud的网关
    为什么要设计网关?上网搜罗了一下,觉得别人说的挺好,就引用了一下,在使用微服务的时候,不同的功能业务会集成一个服务群,而网关是基于服务群上的一个服务层,也是单独暴露给客户端的APIs。客户端对微服务的依赖直接使重构服务变得困难。一种直观的方法是将这些服务隐藏在一个新的服务层后面......
  • Spring Event 与 AOP
    在构建现代化的应用中,日志记录是不可或缺的一环。Spring框架为我们提供了强大的事件机制(SpringEvent)和切面编程(AOP),结合使用可以实现优雅的日志记录,使得代码更加模块化和可维护。本文将介绍如何结合SpringEvent和AOP,以及如何在不同场景下应用这两个强大的特性。1.SpringEvent......