Java文件复制多种方法实例代码

 更新时间:2023年05月24日 08:40:26   作者:LookingTomorrow  
近期用到文件复制,虽然程序很简单,因为时间久了淡忘了,所以写一篇文章记录一下,下面这篇文章主要给大家介绍了关于Java文件复制多种方法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

1、InputStream与OutputStream 

创建两个文件 - 源和目标。然后我们从源创建InputStream并使用OutputStream将其写入目标文件进行 java 复制文件操作。

private static void copyFileUsingStream(File source, File dest) throws IOException {
    InputStream is = null;
    OutputStream os = null;
    try {
        is = new FileInputStream(source);
        os = new FileOutputStream(dest);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = is.read(buffer)) > 0) {
            os.write(buffer, 0, length);
        }
    } finally {
        is.close();
        os.close();
    }
}

2、Apache Commons IO FileUtils

copyFile(File srcFile, File destFile)可用于在 java 中复制文件。如果您已经在项目中使用 Apache Commons IO,那么使用它来简化代码是有意义的。它在内部使用 Java NIO FileChannel,因此如果您尚未将其用于其他功能,则可以避免使用此包装器方法。下面是使用apache commons io进行java复制文件操作的方法

private static void copyFileUsingApacheCommonsIO(File source, File dest) throws IOException {
    FileUtils.copyFile(source, dest);
}

3、Files类的copy()方法在 java 中复制文件

private static void copyFileUsingJava7Files(File source, File dest) throws IOException {
    Files.copy(source.toPath(), dest.toPath());
}

4、使用BufferedInputStream/BufferedOutputStream高效字节流进行复制文件

private static void bufferedStreamCopyFile(File srcFile, File desFile) throwsIOException {
         //使用缓冲字节流进行文件复制
         BufferedInputStream bis = new BufferedInputStream(newFileInputStream(srcFile));
         BufferedOutputStream bos = new BufferedOutputStream(newFileOutputStream(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();
}

5、使用FileReader/FileWriter字符流进行文件复制

注意这种方式只能复制只包含字符的文件,也就意味着你用记事本打开该文件你能够读懂

private static void readerWriterCopyFile(File srcFile, File desFile) throwsIOException  {
         //使用字符流进行文件复制,注意:字符流只能复制只含有汉字的文件
         FileReader fr = newFileReader(srcFile);
         FileWriter fw = newFileWriter(desFile);
         Integer by = 0;
         while((by = fr.read()) != -1) {
 fw.write(by);
 }
 fr.close();
 fw.close();
     }

6、使用BufferedReader/BufferedWriter高效字符流进行文件复制

意这种方式只能复制只包含字符的文件,也就意味着你用记事本打开该文件你能够读懂

private static void bufferedReaderWriterCopyFile(File srcFile, File desFile)  throwsIOException {
         //使用带缓冲区的高效字符流进行文件复制
         BufferedReader br = new BufferedReader(newFileReader(srcFile));
         BufferedWriter bw = new BufferedWriter(newFileWriter(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();
     }

7、使用BufferedReader/BufferedWriter高效字符流进行文件复制

注意这种方式只能复制只包含字符的文件,也就意味着你用记事本打开该文件你能够读懂

private static void bufferedReaderWriterCopyFile(File srcFile, File desFile)  throwsIOException {
         //使用带缓冲区的高效字符流进行文件复制
        BufferedReader br = new BufferedReader(newFileReader(srcFile));
        BufferedWriter bw = new BufferedWriter(newFileWriter(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();
}

8、使用FileChannel复制

Java NIO包括transferFrom方法,根据文档应该比文件流复制的速度更快

private static void copyFileUsingFileChannels(File source, File dest) throws IOException {   
    FileChannel inputChannel = null;   
    FileChannel outputChannel = null;   
  try { 
    inputChannel = new FileInputStream(source).getChannel(); 
    outputChannel = new FileOutputStream(dest).getChannel(); 
    outputChannel.transferFrom(inputChannel, 0, inputChannel.size()); 
  } finally { 
    inputChannel.close(); 
    outputChannel.close(); 
  } 
} 

总结

到此这篇关于Java文件复制多种方法的文章就介绍到这了,更多相关Java文件复制方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java字符串的大写字母右移实现方法

    java字符串的大写字母右移实现方法

    下面小编就为大家带来一篇java字符串的大写字母右移实现方法。小编觉得听不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Java数组与字符串深入探索使用方法

    Java数组与字符串深入探索使用方法

    在今天的文章中,我将为你详细讲述Java学习中重要的一节 [ 数组与字符串 ] ,带你深入了解Java语言中数组的声明、创建和初始化方法,字符串的定义以及常用到的操作方法
    2022-07-07
  • IDEA创建Java Web项目的超详细图文教学

    IDEA创建Java Web项目的超详细图文教学

    IDEA是程序员们常用的java集成开发环境,也是被公认为最好用的java开发工具,下面这篇文章主要给大家介绍了关于IDEA创建Java Web项目的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • MyBatis-Plus找不到Mapper.xml文件的几种解决方法

    MyBatis-Plus找不到Mapper.xml文件的几种解决方法

    mybatis-plus今天遇到一个问题,就是mybatis 没有读取到mapper.xml 文件,所以下面这篇文章主要给大家介绍了关于MyBatis-Plus找不到Mapper.xml文件的几种解决方法,需要的朋友可以参考下
    2022-06-06
  • 基于Spring整合mybatis注解扫描是否成功的问题

    基于Spring整合mybatis注解扫描是否成功的问题

    这篇文章主要介绍了Spring整合mybatis注解扫描是否成功的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • 关于Java中常见的负载均衡算法

    关于Java中常见的负载均衡算法

    这篇文章主要介绍了关于Java中常见的负载均衡算法,负载平衡是一种电子计算机技术,用来在多个计算机、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的,需要的朋友可以参考下
    2023-08-08
  • Java中的main函数的详细介绍

    Java中的main函数的详细介绍

    这篇文章主要介绍了Java中的main函数的详细介绍的相关资料,main()函数在java程序中必出现的函数,这里就讲解下使用方法,需要的朋友可以参考下
    2017-09-09
  • Java9版本新特性同一个Jar支持多JDK版本运行

    Java9版本新特性同一个Jar支持多JDK版本运行

    这篇文章主要为大家介绍了Java9新版本的特性之同一个Jar支持多JDK版本运行的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • java 算法二分查找和折半查找

    java 算法二分查找和折半查找

    这篇文章主要介绍了java 算法二分查找与折半查找的相关资料,需要的朋友可以参考下
    2017-05-05
  • IDEA如何开启并配置services窗口

    IDEA如何开启并配置services窗口

    在使用IntelliJ IDEA时,可能会遇到Services窗口不自动弹出的情况,本文介绍了如何手动开启Services窗口的简单步骤,首先,通过点击菜单栏中的“视图”->“工具窗口”->“服务”,或使用快捷键Alt+F8(注意快捷键可能存在冲突)来打开Services窗口
    2024-10-10

最新评论