专栏首页JAVA乐园Java实现文件复制常见方式

Java实现文件复制常见方式

阅读文本大概需要3分钟。

0x01:FileInputStream/FileOutputStream字节流进行文件的复制

private static void streamCopyFile(File srcFile, File desFile) {
       try{
          // 使用字节流进行文件复制
          FileInputStream fi = new FileInputStream(srcFile);
          FileOutputStream fo = new FileOutputStream(desFile);
          Integer by = 0;
          //一次读取一个字节
          while((by = fi.read()) != -1) {
              fo.write(by);
          }
          fi.close();
          fo.close();
       }catch(Exception e){
          e.printStackTrace();
       }

 }

0x02:BufferedInputStream/BufferedOutputStream高效字节流进行复制文件

private static void bufferedStreamCopyFile(File srcFile, File desFile){
    try{
         // 使用缓冲字节流进行文件复制
         BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
         BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(desFile));
         byte[] b = new byte[1024];
         Integer len = 0;
         //一次读取1024字节的数据
         while((len = bis.read(b)) != -1) {
             bos.write(b, 0, len);
         }
         bis.close();
         bos.close();
     }catch(Exception e){
          e.printStackTrace();
       }
}

0x03: FileReader/FileWriter字符流进行文件复制文件

private static void readerWriterCopyFile(File srcFile, File desFile){
    try{
         // 使用字符流进行文件复制,注意:字符流只能复制只含有汉字的文件
          FileReader fr = new FileReader(srcFile);
          FileWriter fw = new FileWriter(desFile);

          Integer by = 0;
          while((by = fr.read()) != -1) {
              fw.write(by);
          }

         fr.close();
         fw.close();
     }catch(Exception e){
          e.printStackTrace();
     }
}

0x04: BufferedReader/BufferedWriter高效字符流进行文件复制

private static void bufferedReaderWriterCopyFile(File srcFile, File desFile){
    try{
         // 使用带缓冲区的高效字符流进行文件复制
          BufferedReader br = new BufferedReader(new FileReader(srcFile));
          BufferedWriter bw = new BufferedWriter(new FileWriter(desFile));

          char[] c = new char[1024];
          Integer len = 0;
          while((len = br.read(c)) != -1) {
              bw.write(c, 0, len);
         }

         //方式二
         /*
         String s = null;
         while((s = br.readLine()) != null) {
             bw.write(s);
             bw.newLine();
         }
        */

         br.close();
         bw.close();
     }catch(Exception e){
          e.printStackTrace();
     }
}

0x05: NIO实现文件拷贝(用transferTo的实现 或者transferFrom的实现)

public static void  NIOCopyFile(String  source,String target) {
   try{
       //1.采用RandomAccessFile双向通道完成,rw表示具有读写权限
       RandomAccessFile fromFile = new RandomAccessFile(source,"rw");
       FileChannel fromChannel = fromFile.getChannel();

       RandomAccessFile toFile = new RandomAccessFile(target,"rw");
       FileChannel toChannel = toFile.getChannel();

       long count =  fromChannel.size();
       while (count > 0) {
           long transferred = fromChannel.transferTo(fromChannel.position(), count, toChannel);
           count -= transferred;
        }
       if(fromFile!=null) {
           fromFile.close();
       }
       if(fromChannel!=null) {
           fromChannel.close();
       }
   }catch(Exception e){
        e.printStackTrace();
   }
}

0x06: java.nio.file.Files.copy()实现文件拷贝,其中第三个参数决定是否覆盖

public static void copyFile(String source,String target){
    Path sourcePath = Paths.get(source);
    Path destinationPath = Paths.get(target);
    try {
        Files.copy(sourcePath, destinationPath,
                StandardCopyOption.REPLACE_EXISTING);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

本文分享自微信公众号 - JAVA乐园(happyhuangjinjin88),作者:java乐园

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • UML类图符号:各种关系说明以及举例

    UML中描述对象和类之间相互关系的方式包括:依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composit...

    java乐园
  • log4jdbc记录完整的SQL信息

      使用log4jdbc在不改变原有代码的情况下,就可以日志文件中输出的SQL语句和JDBC执行耗时情况。

    java乐园
  • Java内存泄漏分析工具Memory Analyzer Tool

    一个大型的Java项目也许从开发到测试结束并可能不能未发现一些重大的问题,但是在生产环境中还是会出现一些非常棘手的问题,如内存泄漏直接导致服务宕机,遇到这样的问...

    java乐园
  • 用Qt写软件系列五:一个安全防护软件的制作(3)

    引言        上一篇中讲述了工具箱的添加。通过一个水平布局管理器,我们将一系列的工具按钮组合到了一起,完成了工具箱的编写。本文在前面的基础上实现窗体分割效...

    24K纯开源
  • 第四课:模型的使用

    上一节我们创建了模型对象,也导入了测试集,可以说实现了一个简单机器学习的apk环境和核心代码。这一节我们一起看下开发一个完整的人工智能应用程序需要哪些步骤和代码...

    刘盼
  • 选择一款趁手的 PHP 代码编辑器

    正所谓「工欲善其事,必先利其器」,搭建好本地开发环境后,我们还需要选择一款趁手的 PHP 代码编辑器,它是我们日常编码形影相伴的兵器,可以最大化提升编码输出和工...

    学院君
  • Python——图片透明化处理

    量化分析的篇章,前一篇已经做了完结。如果要细究一下,整体的流程框架都有了,要深入详细的搭建程序代码,可能还要再写个十多篇。倘若交易策略多种组合,就要更多篇幅了。

    Ed_Frey
  • 图表系列——展示3个变量的的关系

    逍遥之
  • node.js中this指向失效解决

    原因:虽然类默认的方法指向类的实例,但是如果在外部单独使用该方法,this会指向该方法运行时所在的环境,不再指向对象

    雪山飞猪
  • 超越Google,腾讯推出自研图片编码格式TPG

    近日,记者从国家知识产权局了解到,腾讯公司正式向国家知识产权局提交了一份关于图片编码技术的专利申请。此项专利被命名为TPG(Tiny Portable Grap...

    腾讯音视频实验室

扫码关注云+社区

领取腾讯云代金券