`

Java复制文件的几种方法

    博客分类:
  • java
 
阅读更多

不考虑多线程优化,单线程文件复制最快的方法是(文件越大该方法越有优势,一般比常用方法快30+%):

 

Java代码 复制代码
  1. private static void nioTransferCopy(File source, File target) {   
  2.     FileChannel in = null;   
  3.     FileChannel out = null;   
  4.     FileInputStream inStream = null;   
  5.     FileOutputStream outStream = null;   
  6.     try {   
  7.         inStream = new FileInputStream(source);   
  8.         outStream = new FileOutputStream(target);   
  9.         in = inStream.getChannel();   
  10.         out = outStream.getChannel();   
  11.         in.transferTo(0, in.size(), out);   
  12.     } catch (IOException e) {   
  13.         e.printStackTrace();   
  14.     } finally {   
  15.         close(inStream);   
  16.         close(in);   
  17.         close(outStream);   
  18.         close(out);   
  19.     }   
  20. }  

 

如果需要监测复制进度,可以用第二快的方法(留意buffer的大小,对速度有很大影响):

C-sharp代码 复制代码
  1. private static void nioBufferCopy(File source, File target) {   
  2.     FileChannel in = null;   
  3.     FileChannel out = null;   
  4.     FileInputStream inStream = null;   
  5.     FileOutputStream outStream = null;   
  6.     try {   
  7.         inStream = new FileInputStream(source);   
  8.         outStream = new FileOutputStream(target);   
  9.         in = inStream.getChannel();   
  10.         out = outStream.getChannel();   
  11.         ByteBuffer buffer = ByteBuffer.allocate(4096);   
  12.         while (in.read(buffer) != -1) {   
  13.             buffer.flip();   
  14.             out.write(buffer);   
  15.             buffer.clear();   
  16.         }   
  17.     } catch (IOException e) {   
  18.         e.printStackTrace();   
  19.     } finally {   
  20.         close(inStream);   
  21.         close(in);   
  22.         close(outStream);   
  23.         close(out);   
  24.     }   
  25. }  

 

常用的方法1是:

C-sharp代码 复制代码
  1. private static void customBufferBufferedStreamCopy(File source, File target) {   
  2.     InputStream fis = null;   
  3.     OutputStream fos = null;   
  4.     try {   
  5.         fis = new BufferedInputStream(new FileInputStream(source));   
  6.         fos = new BufferedOutputStream(new FileOutputStream(target));   
  7.         byte[] buf = new byte[4096];   
  8.         int i;   
  9.         while ((i = fis.read(buf)) != -1) {   
  10.             fos.write(buf, 0, i);   
  11.         }   
  12.     }   
  13.     catch (Exception e) {   
  14.         e.printStackTrace();   
  15.     } finally {   
  16.         close(fis);   
  17.         close(fos);   
  18.     }   
  19. }  

 

常用的方法2是:

C-sharp代码 复制代码
  1. private static void customBufferStreamCopy(File source, File target) {   
  2.     InputStream fis = null;   
  3.     OutputStream fos = null;   
  4.     try {   
  5.         fis = new FileInputStream(source);   
  6.         fos = new FileOutputStream(target);   
  7.         byte[] buf = new byte[4096];   
  8.         int i;   
  9.         while ((i = fis.read(buf)) != -1) {   
  10.             fos.write(buf, 0, i);   
  11.         }   
  12.     }   
  13.     catch (Exception e) {   
  14.         e.printStackTrace();   
  15.     } finally {   
  16.         close(fis);   
  17.         close(fos);   
  18.     }   
  19. }  
分享到:
评论

相关推荐

    Java写入文件的几种方法共8页.pdf.zip

    在Java中,写入文件主要有以下几种常见方法: 1. **FileWriter**: `java.io.FileWriter` 类是用于字符流输出的基本类,它允许将字符序列直接写入指定的文件。我们可以使用构造函数指定文件路径,然后调用 `write()`...

    java下载文件的种方式

    这篇博客"java下载文件的种方式"可能详细介绍了几种不同的Java实现文件下载的方法。以下是对这些方法的总结和扩展: 1. **HTTP响应流下载** 这是最基本的方式,通过Servlet或Spring MVC等框架处理HTTP请求,然后在...

    第12讲 Java有几种文件拷贝方式?哪一种最高效?1

    第二种方法是利用Java.NIO类库,特别是`FileChannel`的`transferTo`或`transferFrom`方法。这种方法可以更有效地利用现代操作系统的底层机制,例如零拷贝(zero-copy),减少数据在用户空间和内核空间之间的复制,...

    Java 文件操作大全

    文件读取通常涉及以下几种方式: 1. **按字节读取文件内容**:这是最基础的读取方式,适用于处理二进制数据,如图片、音频或视频文件。`FileInputStream`类提供了按字节读取文件的方法。通过`read()`函数,我们可以...

    JAVA调用C/C++ DLL文件方法

    在 C/C++ 中,需要把 JAVA 中 JNI 的系统函数放到 VC 中,例如,在 JDK 中我的 JDK 装在 C 盘路径是”C:\Program Files\Java\jdk1.5.0_01\include”,把 include 下所有 .h 文件和 include\win32 下的 .h 文件复制到...

    java几个实用的文件操作方法.txt

    本文将详细介绍一个名为`JFile`的类中实现的几种实用文件操作方法,并对每个方法进行深入解析。 #### 一、比较两个文件内容(按字节) 比较两个文件内容是验证文件完整性和一致性的重要手段。`JFile`类中提供了两...

    JAVA简单的读写文本文件的代码

    文件流复制是一种常见的文件操作,通常用于备份文件、转换文件格式等场景。这里采用`BufferedReader`和`PrintWriter`组合的方式来实现文件流之间的复制。 #### 代码实现: ```java public void copyStream...

    java文件的加载

    在Java程序中,资源文件的加载通常涉及以下几种路径: 1. **WEB-INF/classes** - 该目录通常用于存放Java类文件、属性文件以及其他需要被包含在Web应用中的资源文件。 - 在Spring等Web框架中,这是一个重要的位置...

    文件内容替换与文件编码格式转换java源码

    在批量处理文件时,可以使用Java的文件遍历机制,如`File.listFiles()`方法,对目录下的所有文件进行迭代。同时,为了保证原有文件不被破坏,通常会将转换后的文件保存为新的文件,或者覆盖原文件前先备份。 脚本...

    java高速文件缓存

    缓存策略的选择通常涉及以下几种: 1. LRU(Least Recently Used):最近最少使用策略,当缓存满时,淘汰最近最少使用的数据。 2. LFU(Least Frequently Used):最不经常使用策略,淘汰使用频率最低的数据。 3. ...

    nc57保存VO的几种方法

    根据提供的文件信息,我们可以总结出nc57保存VO(Value Object)的几种方法。下面将对这些方法进行详细的解析。 ### 方法一:设置VO的状态与主键 在第一种方法中,通过设置`courseSVO[i]`的状态和主键来实现保存。...

    java读取文件大全

    根据给定的文件标题、描述、...以上介绍的几种方法涵盖了从控制台读取输入、复制文件以及使用`PrintStream`进行文件写入的基本操作。通过理解并实践这些知识点,开发者可以更好地应对实际项目中涉及的文件操作需求。

    java文件传输程序 源码+jar文件

    Java文件传输程序是一种基于Java编程语言开发的应用,用于在计算机之间高效、可靠地移动或复制文件。本项目源码提供了一个基本的实现,支持多线程传输,这使得它能够同时处理多个文件,提高整体传输效率。然而,由于...

    新建、删除、复制、移动文件

    File类提供了多种文件操作方法,包括新建文件、删除文件、复制文件、移动文件等。而输入/输出流则提供了读取和写入文件的功能。 七、总结 文件操作是计算机科学和信息技术中的一种基本操作,涉及到文件的创建、...

    MyBatisDemo && JAVA把一个对象的全部属性复制到另一个相同的对象

    在Java中,我们可以通过以下几种方法实现对象的深拷贝: 1. **实现Serializable接口**:利用序列化和反序列化来实现深拷贝。首先将对象序列化为字节数组,然后再将这个字节数组反序列化为新的对象。这种方法适用于...

    java版文件管理器

    开发者可能使用了Java的Swing或JavaFX库来创建图形用户界面(GUI),让用户能够直观地与文件系统交互,进行文件的创建、删除、复制、移动等操作。 描述中的"博文链接:https://westice.iteye.com/blog/426778"提供...

    Java中对文件的操作

    ### Java中对文件的操作 在Java编程语言中,文件操作是一项基本且重要的功能。通过Java提供的IO类库,我们可以...综上所述,Java中的文件操作非常灵活和强大,通过上述几种方法,我们可以轻松地完成文件的各种操作。

    Java连接Oracle数据库的各种方法

    Java连接Oracle数据库主要依赖于两种方法:JDBC和SQLJ。这两种方法都是Oracle8i及其后续版本中为Java开发者提供的数据库交互方式。 JDBC(Java Database Connectivity)是一种标准的Java API,它允许Java应用程序...

    java文件管理器

    Java文件管理器是一种在移动设备上用于管理和操作文件的应用程序,通常由Java编程语言编写,以适应各种操作系统,如Android。这种应用程序允许用户浏览、创建、删除、重命名、复制和移动存储在设备上的文件和目录,...

Global site tag (gtag.js) - Google Analytics