文件资源操作
Spring 定义了一个 org.springframework.core.io.Resource 接口,Resource 接口是为了统一各种类型不同的资源而定义的,Spring 提供了若干 Resource 接口的实现类,这些实现类可以轻松地加载不同类型的底层资源,并提供了获取文件名、URL 地址以及资源内容的操作方法访问文件资源* 通过 FileSystemResource 以文件系统绝对路径的方式进行访问;* 通过 ClassPathResource 以类路径的方式进行访问;* 通过 ServletContextResource 以相对于 Web 应用根目录的方式进行访问。package com.baobaotao.io; 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) 在资源相对地址上创建新的资源。
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);
package com.baobaotao.io; 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 指向的目标中
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")); } }
package com.baobaotao.io; 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); } }
ServletContext servletContext = request.getSession().getServletContext();WebApplicationContext wac = WebApplicationContextUtils. getWebApplicationContext(servletContext);
hibernateFilter org.springframework.orm.hibernate3.support.OpenSessionInViewFilter 中文乱码过滤器 hibernateFilter *.html encodingFilter org.springframework.web.filter.CharacterEncodingFilter ① Spring 编辑过滤器 ② 编码方式 encoding UTF-8 ③ 强制进行编码转换 forceEncoding true ② 过滤器的匹配 URL encodingFilter *.html
① 指定 Log4J 配置文件的地址② 使用该监听器初始化 Log4J 日志引擎 log4jConfigLocation /WEB-INF/log4j.properties org.springframework.web.util.Log4jConfigListener
org.springframework.web.util.IntrospectorCleanupListener
特殊字符转义
Web 开发者最常面对需要转义的特殊字符类型:* HTML 特殊字符;* JavaScript 特殊字符;
HTML 特殊字符转义
* & :&* " :"* < :<* > :>
JavaScript 特殊字符转义
* ' :/'* " :/"* / ://* 走纸换页: /f* 换行:/n* 换栏符:/t* 回车:/r* 回退符:/b
工具类
JavaScriptUtils.javaScriptEscape(String str);转换为javaScript转义字符表示
HtmlUtils.htmlEscape(String str);①转换为HTML转义字符表示
HtmlUtils.htmlEscapeDecimal(String str); ②转换为数据转义表示
HtmlUtils.htmlEscapeHex(String str); ③转换为十六进制数据转义表示
HtmlUtils.htmlUnescape(String str);将经过转义内容还原
Spring给我们提供了很多的工具类, 应该在我们的日常工作中很好的利用起来. 它可以大大的减轻我们的平时编写代码的长度. 因我们只想用spring的工具类,
而不想把一个大大的spring工程给引入进来. 下面是我从spring3.0.5里抽取出来的工具类. 在最后给出我提取出来的spring代码打成的jar包 spring的里的resouce的概念, 在我们处理io时很有用. 内置的resouce类型- UrlResource
- ClassPathResource
- FileSystemResource
- ServletContextResource
- InputStreamResource
- ByteArrayResource
- EncodedResource 也就是Resource加上encoding, 可以认为是有编码的资源
- VfsResource(在jboss里经常用到, 相应还有 工具类 VfsUtils)
- org.springframework.util.xml.ResourceUtils 用于处理表达资源字符串前缀描述资源的工具. 如: "classpath:". 有 getURL, getFile, isFileURL, isJarURL, extractJarFileURL
- org.springframework.core.annotation.AnnotationUtils 处理注解
- org.springframework.core.io.support.PathMatchingResourcePatternResolver 用 于处理 ant 匹配风格(com/*.jsp, com/**/*.jsp),找出所有的资源, 结合上面的resource的概念一起使用,对于遍历文件很有用. 具体请详细查看javadoc
- org.springframework.core.io.support.PropertiesLoaderUtils 加载Properties资源工具类,和Resource结合
- org.springframework.core.BridgeMethodResolver 桥接方法分析器. 关于桥接方法请参考: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.12.4.5
- org.springframework.core.GenericTypeResolver 范型分析器, 在用于对范型方法, 参数分析.
- org.springframework.core.NestedExceptionUtils
- org.springframework.util.xml.AbstractStaxContentHandler
- org.springframework.util.xml.AbstractStaxXMLReader
- org.springframework.util.xml.AbstractXMLReader
- org.springframework.util.xml.AbstractXMLStreamReader
- org.springframework.util.xml.DomUtils
- org.springframework.util.xml.SimpleNamespaceContext
- org.springframework.util.xml.SimpleSaxErrorHandler
- org.springframework.util.xml.SimpleTransformErrorListener
- org.springframework.util.xml.StaxUtils
- org.springframework.util.xml.TransformerUtils
- org.springframework.util.xml.AntPathMatcherant风格的处理
- org.springframework.util.xml.AntPathStringMatcher
- org.springframework.util.xml.Assert断言,在我们的参数判断时应该经常用
- org.springframework.util.xml.CachingMapDecorator
- org.springframework.util.xml.ClassUtils用于Class的处理
- org.springframework.util.xml.CollectionUtils用于处理集合的工具
- org.springframework.util.xml.CommonsLogWriter
- org.springframework.util.xml.CompositeIterator
- org.springframework.util.xml.ConcurrencyThrottleSupport
- org.springframework.util.xml.CustomizableThreadCreator
- org.springframework.util.xml.DefaultPropertiesPersister
- org.springframework.util.xml.DigestUtils摘要处理, 这里有用于md5处理信息的
- org.springframework.util.xml.FileCopyUtils文件的拷贝处理, 结合Resource的概念一起来处理, 真的是很方便
- org.springframework.util.xml.FileSystemUtils
- org.springframework.util.xml.LinkedCaseInsensitiveMapkey值不区分大小写的LinkedMap
- org.springframework.util.xml.LinkedMultiValueMap一个key可以存放多个值的LinkedMap
- org.springframework.util.xml.Log4jConfigurer一个log4j的启动加载指定配制文件的工具类
- org.springframework.util.xml.NumberUtils处理数字的工具类, 有parseNumber 可以把字符串处理成我们指定的数字格式, 还支持format格式, convertNumberToTargetClass 可以实现Number类型的转化.
- org.springframework.util.xml.ObjectUtils有很多处理null object的方法. 如nullSafeHashCode, nullSafeEquals, isArray, containsElement, addObjectToArray, 等有用的方法
- org.springframework.util.xml.PatternMatchUtilsspring里用于处理简单的匹配. 如 Spring's typical "xxx*", "*xxx" and "*xxx*" pattern styles
- org.springframework.util.xml.PropertyPlaceholderHelper用于处理占位符的替换
- org.springframework.util.xml.ReflectionUtils反映常用工具方法. 有 findField, setField, getField, findMethod, invokeMethod等有用的方法
- org.springframework.util.xml.SerializationUtils用于java的序列化与反序列化. serialize与deserialize方法
- org.springframework.util.xml.StopWatch一个很好的用于记录执行时间的工具类, 且可以用于任务分阶段的测试时间. 最后支持一个很好看的打印格式. 这个类应该经常用
- org.springframework.util.xml.StringUtils
- org.springframework.util.xml.SystemPropertyUtils
- org.springframework.util.xml.TypeUtils用于类型相容的判断. isAssignable
- org.springframework.util.xml.WeakReferenceMonitor弱引用的监控
-
- org.springframework.web.util.CookieGenerator
- org.springframework.web.util.HtmlCharacterEntityDecoder
- org.springframework.web.util.HtmlCharacterEntityReferences
- org.springframework.web.util.HtmlUtils
- org.springframework.web.util.HttpUrlTemplate这个类用于用字符串模板构建url, 它会自动处理url里的汉字及其它相关的编码. 在读取别人提供的url资源时, 应该经常用 String url = "http://localhost/myapp/{name}/{id}"
- org.springframework.web.util.JavaScriptUtils
- org.springframework.web.util.Log4jConfigListener用listener的方式来配制log4j在web环境下的初始化
- org.springframework.web.util.UriTemplate
- org.springframework.web.util.UriUtils处理uri里特殊字符的编码
- org.springframework.web.util.WebUtils
- org.springframework.web.util.