• 中文
    • English
  • 注册
  • 查看作者
  • Java-IO:使用字节流复制图片

    一.  前言

    我们可以利用IO操作,复制我们电脑中的任意文件,下面我们以复制一张图片为例:

    二.  使用字节流复制图片

    因为windows系统下的目录分隔符是右斜杠\,但是Linux是左斜杠/,所以为了使我们的代码兼容这两个系统,在有目录的相关操作中,我们一般不会使用\或者/,而是使用:File.separator来代替

    package io.zhangjia.io;
    
    
    import java.io.*;
    
    public class CopyImg {
        public static void main(String[] args) throws IOException {
    
            File inFile = new File("E:" + File.separator + "zhangjia" + File.separator + "1.png");
            File outFile = new File("E:" + File.separator + "zhangjia" + File.separator + "2.png");
            File parentFile = outFile.getParentFile();
            if (!parentFile.exists()) {
                System.out.println("创建目录:" + parentFile.mkdirs());
            }
            FileInputStream is = new FileInputStream(inFile);
            FileOutputStream os = new FileOutputStream(outFile);
            // 开始读
            System.out.println("开始复制。。。");
            long start = System.currentTimeMillis();
            int len = 0;
            byte[] b = new byte[1024];
            while ((len = is.read(b)) != -1) {
                os.write(b, 0, len);
            }
            long end = System.currentTimeMillis();
            System.out.println("复制成功,耗时:" + (end - start) + "毫秒");
            is.close();
            os.close();
    
        }
    }

    三.  使用CommonsIo复制图片

    除了使用上面的方法外,我们还可以使用Apache家的CommonsIo来直接复制图片:

    package io.zhangjia.io;
    
    
    
    import org.apache.commons.io.IOUtils;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class CopyImgByCommonsIo {
        public static void main(String[] args) throws IOException {
    
            File inFile = new File("E:" + File.separator + "zhangjia" + File.separator + "1.jpg");
            File outFile = new File("E:" + File.separator + "zhangjia" + File.separator + "2.jpg");
            File parentFile = outFile.getParentFile();
            if (!parentFile.exists()) {
                System.out.println("创建目录:" + parentFile.mkdirs());
            }
            FileInputStream is = new FileInputStream(inFile);
            FileOutputStream os = new FileOutputStream(outFile);
            // 开始读
            System.out.println("开始复制。。。");
            long start = System.currentTimeMillis();
          /*  int len = 0;
            byte[] b = new byte[20000];
            while ((len = is.read(b)) != -1) {
                os.write(b, 0, len);
            }
            上面的五行可以直接用下面的一行来代替
            */
            
            IOUtils.copy(is,os);
            long end = System.currentTimeMillis();
            System.out.println("复制成功,耗时:" + (end - start) + "毫秒");
            is.close();
            os.close();
    
        }
    }

    山东省·济宁市
  • 0
  • 0
  • 0
  • 1.6k
  • pearPLUS

    请登录之后再进行评论

    登录
    单栏布局 侧栏位置: