本帖最后由 先小涛 于 2013-4-20 16:49 编辑
- /**
- * 看老毕的视频,自己写了个工具类,求完善。
- * 从线程安全、代码重构、功能扩展(复制所用时间)等方面进行代码优化?不必全部考虑,也可以从其他方面考虑
- * 代码已测试,运行结果正确。
- * @author 先小涛
- * @version 1.0
- */
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- /**
- * CopyFileUtil:复制文件工具类,可以复制文本文件、图像文件、视频以及其他文件,不能复制文件夹
- * properties:InputStream in,OutputStream out,byte[] buff,int len
- */
- class CopyFileUtil {
- private InputStream in; //字节读取流对象
- private OutputStream out; //字节写入流对象
- private byte[] buff; //缓冲区,根据文件类型,动态设定大小
- private int len;
- /**
- * 构造函数
- * @param srcPath 源始文件路径名称
- * @param objPath 目的文件路径名称
- */
- public CopyFileUtil(String srcPath, String objPath){
- try {
- this.in = new FileInputStream(srcPath);
- this.out = new FileOutputStream(objPath);
- } catch (FileNotFoundException e) {
- throw new RuntimeException("创建对象失败,请确认文件路径名是否正确?");
- }
- }
- //复制文本文件,缓冲区大小为2K,若源文件小,则可调用此方法
- public void copyText() throws IOException{
- byte[] smallBuf = new byte[1024];
- copy(smallBuf);
- close();
- }
- //复制大型文件,缓冲区大小为1M,若源文件大,则可调用此方法
- public void copyOtherFiles() throws IOException{
- byte[] bigerBuf = new byte[1024*512];
- copy(bigerBuf);
- close();
- }
- //复制图像文件,扩展功能,调用copyOtherFiles()
- public void copyPicture() throws IOException{
- copyOtherFiles();
- }
- //复制视频文件,扩展功能,调用copyOtherFiles()
- public void copyMedia() throws IOException{
- copyOtherFiles();
- }
- //复制文本文件,缓冲区大小为2k,因源文件小,则可调用此方法
- /**
- * 复制方法
- * @param buf
- * @throws IOException
- */
- public void copy(byte[] buf) throws IOException{
- this.buff = buf;
- while((len=in.read(buff)) != -1){
- out.write(buff,0,len);
- }
- close();
- }
- /**
- * close():关闭资源
- */
- public void close(){
- try {
- in.close();
- out.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- /**
- * 测试Demo
- */
- public class CopyFileUtilDemo{
- public static void main(String[] args) throws IOException {
- CopyFileUtil cfu1 = new CopyFileUtil("d:\\demo.java", "d:\\demo_copy.java");
- cfu1.copyText(); //测试复制文本文件
- CopyFileUtil cfu2 = new CopyFileUtil("d:\\test.png", "d:\\test_copy.png");
- cfu2.copyPicture(); //测试复制图像文件
- CopyFileUtil cfu3 = new CopyFileUtil("d:\\黑马程序员.avi", "d:\\黑马程序员copy.avi");
- cfu3.copyMedia(); //测试复制视频文件
- CopyFileUtil cfu4 = new CopyFileUtil("d:\\java.doc", "d:\\java_copy.doc");
- cfu4.copyOtherFiles(); //测试复制文档文件
- }
- }
复制代码 |