利用spring中的FileCopyUtils.copy()复制文件
来源:互联网 发布:广州轩辕网络怎么样 编辑:程序博客网 时间:2024/06/05 21:16
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.util.FileCopyUtils;
/**
*
* @function 利用spring中的FileCopyUtils.copy()复制文件
* @author liudd
* @time Apr 18, 2013
* @since restIframe
*/
public class FileutilsTest {
public static void main(String[] args) {
try {
FileOutputStream os=new FileOutputStream(new File("d:/22.jpg"));//被复制到此文件中
Resource resource=new ClassPathResource("/1.jpg"); //文件源 :找类文件下的这个.jpg文件
FileCopyUtils.copy(resource.getInputStream(),os);
PS:(
//FileOutputStream os=new FileOutputStream(new File(fpt+".jpg"));
//FileSystemResource resource = new FileSystemResource( "E:/union.jpg");
//FileCopyUtils.copy(resource.getInputStream(),os);
FileStstemResource //根据文件路径找
)
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//**************************************************************************************************************
//*****************************************************内容补充
通过Spring Resource接口获取资源
目录
1 Resource简介
2 通过ResourceLoader获取资源
3 在bean中获取Resource的方式
1 Resource简介
在Spring内部,针对于资源文件有一个统一的接口Resource表示。其主要实现类有ClassPathResource、FileSystemResource、UrlResource、ByteArrayResource、ServletContextResource和InputStreamResource。Resource接口中主要定义有以下方法:
l exists():用于判断对应的资源是否真的存在。
l isReadable():用于判断对应资源的内容是否可读。需要注意的是当其结果为true的时候,其内容未必真的可读,但如果返回false,则其内容必定不可读。
l isOpen():用于判断当前资源是否代表一个已打开的输入流,如果结果为true,则表示当前资源的输入流不可多次读取,而且在读取以后需要对它进行关闭,以防止内存泄露。该方法主要针对于InputStreamResource,实现类中只有它的返回结果为true,其他都为false。
l getURL():返回当前资源对应的URL。如果当前资源不能解析为一个URL则会抛出异常。如ByteArrayResource就不能解析为一个URL。
l getFile():返回当前资源对应的File。如果当前资源不能以绝对路径解析为一个File则会抛出异常。如ByteArrayResource就不能解析为一个File。
l getInputStream():获取当前资源代表的输入流。除了InputStreamResource以外,其它Resource实现类每次调用getInputStream()方法都将返回一个全新的InputStream。
ClassPathResource可用来获取类路径下的资源文件。假设我们有一个资源文件test.txt在类路径下,我们就可以通过给定对应资源文件在类路径下的路径path来获取它,new ClassPathResource(“test.txt”)。
FileSystemResource可用来获取文件系统里面的资源。我们可以通过对应资源文件的文件路径来构建一个FileSystemResource。FileSystemResource还可以往对应的资源文件里面写内容,当然前提是当前资源文件是可写的,这可以通过其isWritable()方法来判断。FileSystemResource对外开放了对应资源文件的输出流,可以通过getOutputStream()方法获取到。
UrlResource可用来代表URL对应的资源,它对URL做了一个简单的封装。通过给定一个URL地址,我们就能构建一个UrlResource。
ByteArrayResource是针对于字节数组封装的资源,它的构建需要一个字节数组。
ServletContextResource是针对于ServletContext封装的资源,用于访问ServletContext环境下的资源。ServletContextResource持有一个ServletContext的引用,其底层是通过ServletContext的getResource()方法和getResourceAsStream()方法来获取资源的。
InputStreamResource是针对于输入流封装的资源,它的构建需要一个输入流。
2 通过ResourceLoader获取资源
在Spring里面还定义有一个ResourceLoader接口,该接口中只定义了一个用于获取Resource的getResource(String location)方法。它的实现类有很多,这里我们先挑一个DefaultResourceLoader来讲。DefaultResourceLoader在获取Resource时采用的是这样的策略:首先判断指定的location是否含有“classpath:”前缀,如果有则把location去掉“classpath:”前缀返回对应的ClassPathResource;否则就把它当做一个URL来处理,封装成一个UrlResource进行返回;如果当成URL处理也失败的话就把location对应的资源当成是一个ClassPathResource进行返回。
ApplicationContext接口也继承了ResourceLoader接口,所以它的所有实现类都实现了ResourceLoader接口,都可以用来获取Resource。
对于ClassPathXmlApplicationContext而言,它在获取Resource时继承的是它的父类DefaultResourceLoader的策略。
FileSystemXmlApplicationContext也继承了DefaultResourceLoader,但是它重写了DefaultResourceLoader的getResourceByPath(String path)方法。所以它在获取资源文件时首先也是判断指定的location是否包含“classpath:”前缀,如果包含,则把location中“classpath:”前缀后的资源从类路径下获取出来,当做一个ClassPathResource;否则,继续尝试把location封装成一个URL,返回对应的UrlResource;如果还是失败,则把location指定位置的资源当做一个FileSystemResource进行返回。
3 在bean中获取Resource的方式
通过上面内容的介绍,我们知道,在bean中获取Resource主要有以下几种方式:
1.直接通过new各种类型的Resource来获取对应的Resource。
2.在bean里面获取到对应的ApplicationContext,再通过ApplicationContext的getResource(String path)方法获取对应的Resource。
3.直接创建DefaultResourceLoader的实例,再调用其getResource(String location)方法获取对应的Resource。
4.通过依赖注入的方式把Resource注入到bean中。示例如下:
applicationContext.xml文件:
从上面可以看到我们有一个类ClassA,其持有一个Resource属性,在Spring bean配置文件中我们直接给ClassA注入了属性resource。其对应的测试代码如下:
- 利用spring中的FileCopyUtils.copy()复制文件
- 利用spring中的FileCopyUtils.copy()复制文件
- 利用spring中的FileCopyUtils.copy()复制文件
- java 文件移动 常规四种方法 和利用FileCopyUtils.copy( , )方法
- java 文件移动 常规四种方法 和利用FileCopyUtils.copy( , )方法
- FileCopyUtils
- 复制文件命令 copy
- 利用C语言中的函数实现文件的Copy
- 批处理中复制文件:copy
- ant copy 复制文件用法
- Python--shutil--copy--复制文件
- 利用io流copy文件
- 利用FileChannel复制文件
- 利用ssh复制文件
- Python中的copy()方法为“浅复制”
- C++中的复制初始化(copy initialization)
- java移动/复制文件 copy/move file
- cp(copy)复制文件或目录
- JAX-WS构建简单webservice部署到tomcat上
- php curl长连接
- 【手把手教你树莓派3 (六)】使用 motion 和 mjpg 做视频监控器
- linux内核面试题
- 可伸缩的文本控件ExpandTextView
- 利用spring中的FileCopyUtils.copy()复制文件
- 第一篇博客
- eclipse设置自定义快捷键
- 入侵查询记录
- C#语言和数据库技术基础 ----------------- 第二章 简答二 、
- Input框的智能提示下拉层功能
- QueryPerformanceFrequency与QueryPerformanceCounter计时函数
- ADC实验复习总结
- leetcode4题 题解 翻译 C语言版 Python版