zoukankan      html  css  js  c++  java
  • Spring常用工具类

    Spring框架下自带了丰富的工具类,在我们开发时可以简化很多工作:

    1.Resource访问文件资源:

    具体有:

    ResourceUtils.getFile(url);
    FileSystemResource(); ClassPathResource();
    ServletContextResource(application,url);

    2.文件操作 FileCopyUtils

    具体有:

    FileCopyUtils.copy(Resource.getFile,new File(Resource.getFile(),getParent()+'目标文件名')); 

    3.属性文件操作 PropertiesLoaderUtils

    具体有:

    PropertiesLoaderUtils.loadAllProperties("属性文件名");  --基于类路径

    4.EncodedResource(Resource对象,”UTF-8″) 编码资源(特殊的);

    5.WebApplicationContextUtils 

    6.StringEscapeutils 编码解码

    文件资源操作

    1. 通过 FileSystemResource 以文件系统绝对路径的方式进行访问;
    2. 通过 ClassPathResource 以类路径的方式进行访问;
    3. 通过 ServletContextResource 以相对于 Web 应用根目录的方式进行访问。
    import java.io.IOException;
    import java.io.InputStream;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.core.io.FileSystemResource;
    import org.springframework.core.io.Resource;
    public class FileSourceExample {
        public static void main(String[] args) {
            try {
                String filePath =
                "D:/masterSpring/chapter23/webapp/WEB-INF/classes/conf/file1.txt";
                // ① 使用系统文件路径方式加载文件
                Resource res1 = new FileSystemResource(filePath);
                // ② 使用类路径方式加载文件
                Resource res2 = new ClassPathResource("conf/file1.txt");
                InputStream ins1 = res1.getInputStream();
                InputStream ins2 = res2.getInputStream();
                System.out.println("res1:"+res1.getFilename());
                System.out.println("res2:"+res2.getFilename());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    在获取资源后,您就可以通过 Resource 接口定义的多个方法访问文件的数据和其它的信息

    getFileName() 获取文件名,

    getFile() 获取资源对应的 File 对象,

    getInputStream() 直接获取文件的输入流。

    createRelative(String relativePath) 在资源相对地址上创建新的资源。

    在 Web 应用中,您还可以通过 ServletContextResource 以相对于 Web 应用根目录的方式访问文件资源

    Spring 提供了一个 ResourceUtils 工具类,它支持“classpath:”和“file:”的地址前缀 ,它能够从指定的地址加载文件资源。

    File clsFile = ResourceUtils.getFile("classpath:conf/file1.txt");  
    System.out.println(clsFile.isFile());
    String httpFilePath = "file:D:/masterSpring/chapter23/src/conf/file1.txt";
    File httpFile = ResourceUtils.getFile(httpFilePath);

    文件操作

    在使用各种 Resource 接口的实现类加载文件资源后,经常需要对文件资源进行读取、拷贝、转存等不同类型的操作。

    FileCopyUtils

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

    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileReader;
    import java.io.OutputStream;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.core.io.Resource;
    import org.springframework.util.FileCopyUtils;
    public class FileCopyUtilsExample {
        public static void main(String[] args) throws Throwable {
            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);
        }
    }
    static void copy(byte[] in, File out)     将 byte[] 拷贝到一个文件中
    static void copy(byte[] in, OutputStream out)     将 byte[] 拷贝到一个输出流中
    static int copy(File in, File out)     将文件拷贝到另一个文件中
    static int copy(InputStream in, OutputStream out)     将输入流拷贝到输出流中
    static int copy(Reader in, Writer out)     将 Reader 读取的内容拷贝到 Writer 指向目标输出中
    static void copy(String in, Writer out)     将字符串拷贝到一个 Writer 指向的目标中属性文件操作  
    Spring 提供的 PropertiesLoaderUtils 允许您直接通过基于类路径的文件 地址加载属性资源  
    package com.baobaotao.io;
    import java.util.Properties;
    import org.springframework.core.io.support.PropertiesLoaderUtils;
    public class PropertiesLoaderUtilsExample {
        public static void main(String[] args) throws Throwable {   
        // ① jdbc.properties 是位于类路径下的文件
      Properties props = PropertiesLoaderUtils.loadAllProperties("jdbc.properties");
      System.out.println(props.getProperty("jdbc.driverClassName"));
        }
    }

    特殊编码的资源

    当您使用 Resource 实现类加载文件资源时,它默认采用操作系统的编码格式。

    如果文件资源采用了特殊的编码格式(如 UTF-8),则在读取资源内容时必须事先通过 EncodedResource 指定编码格式,否则将会产生中文乱码的问题。

    import org.springframework.core.io.ClassPathResource;
    import org.springframework.core.io.Resource;
    import org.springframework.core.io.support.EncodedResource;
    import org.springframework.util.FileCopyUtils;
    public class EncodedResourceExample {
            public static void main(String[] args) throws Throwable  {
                Resource res = new ClassPathResource("conf/file1.txt");
                // ① 指定文件资源对应的编码格式(UTF-8)
                EncodedResource encRes = new EncodedResource(res,"UTF-8");
                // ② 这样才能正确读取文件的内容,而不会出现乱码
                String content  = FileCopyUtils.copyToString(encRes.getReader());
                System.out.println(content); 
        }
    }

    访问 Spring 容器,获取容器中的 Bean,使用 WebApplicationContextUtils 工具类

    ServletContext servletContext = request.getSession().getServletContext();
    WebApplicationContext wac = WebApplicationContextUtils. getWebApplicationContext(servletContext);

    中文乱码过滤器

    <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>
        org.springframework.web.filter.CharacterEncodingFilter ① Spring 编辑过滤器
    </filter-class>
    <init-param> ② 编码方式
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param> ③ 强制进行编码转换
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
    </filter>
    <filter-mapping> ② 过滤器的匹配 URL
        <filter-name>encodingFilter</filter-name>
        <url-pattern>*.html</url-pattern>
    </filter-mapping>

    特殊字符转义

    Web 开发者最常面对需要转义的特殊字符类型:
    HTML 特殊字符;  
    JavaScript 特殊字符;
    
    HTML 特殊字符转义
    & :&amp;  
    " :&quot;< :&lt;  
    >&gt;
    
    JavaScript 特殊字符转义
    ' :/' 
    " :/" 
    / ://  
    走纸换页: /f  
    换行:/n  
    换栏符:/t  
    回车:/r  
    回退符:/b
  • 相关阅读:
    Java之美[从菜鸟到高手演变]之设计模式
    Akka边学边写(1)-- Hello, World!
    [D3 + AngularJS] 15. Create a D3 Chart as an Angular Directive
    [D3] 14. Line and Area Charts with D3
    [D3] 13. Cleaner D3 code with selection.call()
    [D3] 12. Basic Transitions with D3
    [D3] 9. Scatter Plot
    [D3] 8. Margins
    [D3] 7. Quantitative Scales
    Runoob-Java-高级教程-实例-字符串:09. Java 实例
  • 原文地址:https://www.cnblogs.com/wade-luffy/p/6125294.html
Copyright © 2011-2022 走看看