不考虑多线程优化,单线程文件复制最快的方法是(文件越大该方法越有优势,一般比常用方法快30+%):
- private static void nioTransferCopy(File source, File target) {
- FileChannel in = null;
- FileChannel out = null;
- FileInputStream inStream = null;
- FileOutputStream outStream = null;
- try {
- inStream = new FileInputStream(source);
- outStream = new FileOutputStream(target);
- in = inStream.getChannel();
- out = outStream.getChannel();
- in.transferTo(0, in.size(), out);
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- close(inStream);
- close(in);
- close(outStream);
- close(out);
- }
- }
如果需要监测复制进度,可以用第二快的方法(留意buffer的大小,对速度有很大影响):
- private static void nioBufferCopy(File source, File target) {
- FileChannel in = null;
- FileChannel out = null;
- FileInputStream inStream = null;
- FileOutputStream outStream = null;
- try {
- inStream = new FileInputStream(source);
- outStream = new FileOutputStream(target);
- in = inStream.getChannel();
- out = outStream.getChannel();
- ByteBuffer buffer = ByteBuffer.allocate(4096);
- while (in.read(buffer) != -1) {
- buffer.flip();
- out.write(buffer);
- buffer.clear();
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- close(inStream);
- close(in);
- close(outStream);
- close(out);
- }
- }
常用的方法1是:
- private static void customBufferBufferedStreamCopy(File source, File target) {
- InputStream fis = null;
- OutputStream fos = null;
- try {
- fis = new BufferedInputStream(new FileInputStream(source));
- fos = new BufferedOutputStream(new FileOutputStream(target));
- byte[] buf = new byte[4096];
- int i;
- while ((i = fis.read(buf)) != -1) {
- fos.write(buf, 0, i);
- }
- }
- catch (Exception e) {
- e.printStackTrace();
- } finally {
- close(fis);
- close(fos);
- }
- }
常用的方法2是:
- private static void customBufferStreamCopy(File source, File target) {
- InputStream fis = null;
- OutputStream fos = null;
- try {
- fis = new FileInputStream(source);
- fos = new FileOutputStream(target);
- byte[] buf = new byte[4096];
- int i;
- while ((i = fis.read(buf)) != -1) {
- fos.write(buf, 0, i);
- }
- }
- catch (Exception e) {
- e.printStackTrace();
- } finally {
- close(fis);
- close(fos);
- }
- }
相关推荐
在Java中,写入文件主要有以下几种常见方法: 1. **FileWriter**: `java.io.FileWriter` 类是用于字符流输出的基本类,它允许将字符序列直接写入指定的文件。我们可以使用构造函数指定文件路径,然后调用 `write()`...
这篇博客"java下载文件的种方式"可能详细介绍了几种不同的Java实现文件下载的方法。以下是对这些方法的总结和扩展: 1. **HTTP响应流下载** 这是最基本的方式,通过Servlet或Spring MVC等框架处理HTTP请求,然后在...
第二种方法是利用Java.NIO类库,特别是`FileChannel`的`transferTo`或`transferFrom`方法。这种方法可以更有效地利用现代操作系统的底层机制,例如零拷贝(zero-copy),减少数据在用户空间和内核空间之间的复制,...
文件读取通常涉及以下几种方式: 1. **按字节读取文件内容**:这是最基础的读取方式,适用于处理二进制数据,如图片、音频或视频文件。`FileInputStream`类提供了按字节读取文件的方法。通过`read()`函数,我们可以...
在 C/C++ 中,需要把 JAVA 中 JNI 的系统函数放到 VC 中,例如,在 JDK 中我的 JDK 装在 C 盘路径是”C:\Program Files\Java\jdk1.5.0_01\include”,把 include 下所有 .h 文件和 include\win32 下的 .h 文件复制到...
本文将详细介绍一个名为`JFile`的类中实现的几种实用文件操作方法,并对每个方法进行深入解析。 #### 一、比较两个文件内容(按字节) 比较两个文件内容是验证文件完整性和一致性的重要手段。`JFile`类中提供了两...
文件流复制是一种常见的文件操作,通常用于备份文件、转换文件格式等场景。这里采用`BufferedReader`和`PrintWriter`组合的方式来实现文件流之间的复制。 #### 代码实现: ```java public void copyStream...
在Java程序中,资源文件的加载通常涉及以下几种路径: 1. **WEB-INF/classes** - 该目录通常用于存放Java类文件、属性文件以及其他需要被包含在Web应用中的资源文件。 - 在Spring等Web框架中,这是一个重要的位置...
在批量处理文件时,可以使用Java的文件遍历机制,如`File.listFiles()`方法,对目录下的所有文件进行迭代。同时,为了保证原有文件不被破坏,通常会将转换后的文件保存为新的文件,或者覆盖原文件前先备份。 脚本...
缓存策略的选择通常涉及以下几种: 1. LRU(Least Recently Used):最近最少使用策略,当缓存满时,淘汰最近最少使用的数据。 2. LFU(Least Frequently Used):最不经常使用策略,淘汰使用频率最低的数据。 3. ...
根据提供的文件信息,我们可以总结出nc57保存VO(Value Object)的几种方法。下面将对这些方法进行详细的解析。 ### 方法一:设置VO的状态与主键 在第一种方法中,通过设置`courseSVO[i]`的状态和主键来实现保存。...
根据给定的文件标题、描述、...以上介绍的几种方法涵盖了从控制台读取输入、复制文件以及使用`PrintStream`进行文件写入的基本操作。通过理解并实践这些知识点,开发者可以更好地应对实际项目中涉及的文件操作需求。
Java文件传输程序是一种基于Java编程语言开发的应用,用于在计算机之间高效、可靠地移动或复制文件。本项目源码提供了一个基本的实现,支持多线程传输,这使得它能够同时处理多个文件,提高整体传输效率。然而,由于...
File类提供了多种文件操作方法,包括新建文件、删除文件、复制文件、移动文件等。而输入/输出流则提供了读取和写入文件的功能。 七、总结 文件操作是计算机科学和信息技术中的一种基本操作,涉及到文件的创建、...
在Java中,我们可以通过以下几种方法实现对象的深拷贝: 1. **实现Serializable接口**:利用序列化和反序列化来实现深拷贝。首先将对象序列化为字节数组,然后再将这个字节数组反序列化为新的对象。这种方法适用于...
开发者可能使用了Java的Swing或JavaFX库来创建图形用户界面(GUI),让用户能够直观地与文件系统交互,进行文件的创建、删除、复制、移动等操作。 描述中的"博文链接:https://westice.iteye.com/blog/426778"提供...
### Java中对文件的操作 在Java编程语言中,文件操作是一项基本且重要的功能。通过Java提供的IO类库,我们可以...综上所述,Java中的文件操作非常灵活和强大,通过上述几种方法,我们可以轻松地完成文件的各种操作。
Java连接Oracle数据库主要依赖于两种方法:JDBC和SQLJ。这两种方法都是Oracle8i及其后续版本中为Java开发者提供的数据库交互方式。 JDBC(Java Database Connectivity)是一种标准的Java API,它允许Java应用程序...
Java文件管理器是一种在移动设备上用于管理和操作文件的应用程序,通常由Java编程语言编写,以适应各种操作系统,如Android。这种应用程序允许用户浏览、创建、删除、重命名、复制和移动存储在设备上的文件和目录,...