A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 先小涛 中级黑马   /  2013-4-19 14:30  /  888 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 先小涛 于 2013-4-20 16:49 编辑
  1. /**
  2. * 看老毕的视频,自己写了个工具类,求完善。
  3. * 从线程安全、代码重构、功能扩展(复制所用时间)等方面进行代码优化?不必全部考虑,也可以从其他方面考虑
  4. * 代码已测试,运行结果正确。
  5. * @author 先小涛
  6. * @version 1.0
  7. */
  8. import java.io.FileInputStream;
  9. import java.io.FileNotFoundException;
  10. import java.io.FileOutputStream;
  11. import java.io.IOException;
  12. import java.io.InputStream;
  13. import java.io.OutputStream;
  14. /**
  15. * CopyFileUtil:复制文件工具类,可以复制文本文件、图像文件、视频以及其他文件,不能复制文件夹
  16. * properties:InputStream in,OutputStream out,byte[] buff,int len
  17. */
  18. class CopyFileUtil {
  19.         private InputStream in;                //字节读取流对象
  20.         private OutputStream out;        //字节写入流对象
  21.         private byte[] buff;                //缓冲区,根据文件类型,动态设定大小
  22.         private int len;
  23.         /**
  24.          * 构造函数
  25.          * @param srcPath 源始文件路径名称
  26.          * @param objPath 目的文件路径名称
  27.          */
  28.         public CopyFileUtil(String srcPath, String objPath){
  29.                 try {
  30.                         this.in = new FileInputStream(srcPath);
  31.                         this.out = new FileOutputStream(objPath);
  32.                 } catch (FileNotFoundException e) {
  33.                         throw new RuntimeException("创建对象失败,请确认文件路径名是否正确?");
  34.                 }
  35.         }
  36.         //复制文本文件,缓冲区大小为2K,若源文件小,则可调用此方法
  37.         public void copyText() throws IOException{
  38.                 byte[] smallBuf = new byte[1024];
  39.                 copy(smallBuf);
  40.                 close();
  41.         }
  42.         //复制大型文件,缓冲区大小为1M,若源文件大,则可调用此方法
  43.         public void copyOtherFiles() throws IOException{
  44.                 byte[] bigerBuf = new byte[1024*512];
  45.                 copy(bigerBuf);
  46.                 close();
  47.         }
  48.         //复制图像文件,扩展功能,调用copyOtherFiles()
  49.         public void copyPicture() throws IOException{
  50.                 copyOtherFiles();
  51.         }
  52.         //复制视频文件,扩展功能,调用copyOtherFiles()
  53.         public void copyMedia() throws IOException{
  54.                 copyOtherFiles();
  55.         }
  56.         //复制文本文件,缓冲区大小为2k,因源文件小,则可调用此方法
  57.         /**
  58.          * 复制方法
  59.          * @param buf
  60.          * @throws IOException
  61.          */
  62.         public void copy(byte[] buf) throws IOException{
  63.                 this.buff = buf;
  64.                 while((len=in.read(buff)) != -1){
  65.                         out.write(buff,0,len);
  66.                 }
  67.                 close();
  68.         }
  69.         /**
  70.          * close():关闭资源
  71.          */
  72.         public void close(){
  73.                 try {
  74.                         in.close();
  75.                         out.close();
  76.                 } catch (IOException e) {
  77.                         e.printStackTrace();
  78.                 }
  79.         }
  80. }
  81. /**
  82. * 测试Demo
  83. */
  84. public class CopyFileUtilDemo{
  85.         public static void main(String[] args) throws IOException {
  86.                 CopyFileUtil cfu1 = new CopyFileUtil("d:\\demo.java", "d:\\demo_copy.java");
  87.                 cfu1.copyText();                //测试复制文本文件
  88.                 CopyFileUtil cfu2 = new CopyFileUtil("d:\\test.png", "d:\\test_copy.png");
  89.                 cfu2.copyPicture();                //测试复制图像文件
  90.                 CopyFileUtil cfu3 = new CopyFileUtil("d:\\黑马程序员.avi", "d:\\黑马程序员copy.avi");
  91.                 cfu3.copyMedia();                //测试复制视频文件
  92.                 CopyFileUtil cfu4 = new CopyFileUtil("d:\\java.doc", "d:\\java_copy.doc");
  93.                 cfu4.copyOtherFiles();        //测试复制文档文件
  94.         }
  95. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

1 个回复

倒序浏览
没人回帖,就结帖了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马