`
mzh_2008beijing
  • 浏览: 233948 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA复制文件最快的算法

 
阅读更多
    下面列举了两个拷贝文件的算法,第一个使用的是IO流--Buffered流,速度较慢;第二个方法使用的是java.nio.channels.FileChannel的transferTo方法,速度较快。所以推荐第二种方法。

/**
	 * 复制文件
	 * 
	 * @param srcFile
	 *            源文件File
	 * @param destDir
	 *            目标目录File
	 * @param newFileName
	 *            新文件名
	 * @return 实际复制的字节数,如果文件、目录不存在、文件为null或者发生IO异常,返回-1
	 */
	public static long copyFile1(File srcFile, File destDir, String newFileName) {
		long copySizes = 0;
		if (!srcFile.exists()) {
			System.out.println("源文件不存在");
			copySizes = -1;
		} else if (!destDir.exists()) {
			System.out.println("目标目录不存在");
			copySizes = -1;
		} else if (newFileName == null) {
			System.out.println("文件名为null");
			copySizes = -1;
		} else {
			try {
				BufferedInputStream bin = new BufferedInputStream(
						new FileInputStream(srcFile));
				BufferedOutputStream bout = new BufferedOutputStream(
						new FileOutputStream(new File(destDir, newFileName)));
				int b = 0, i = 0;
				while ((b = bin.read()) != -1) {
					bout.write(b);
					i++;
				}
				bout.flush();
				bin.close();
				bout.close();
				copySizes = i;

			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return copySizes;
	}

	/**
	 * 复制文件(以超快的速度复制文件)
	 * 
	 * @param srcFile
	 *            源文件File
	 * @param destDir
	 *            目标目录File
	 * @param newFileName
	 *            新文件名
	 * @return 实际复制的字节数,如果文件、目录不存在、文件为null或者发生IO异常,返回-1
	 */
	public static long copyFile2(File srcFile, File destDir, String newFileName) {
		long copySizes = 0;
		if (!srcFile.exists()) {
			System.out.println("源文件不存在");
			copySizes = -1;
		} else if (!destDir.exists()) {
			System.out.println("目标目录不存在");
			copySizes = -1;
		} else if (newFileName == null) {
			System.out.println("文件名为null");
			copySizes = -1;
		} else {
			try {
				FileChannel fcin = new FileInputStream(srcFile).getChannel();
				FileChannel fcout = new FileOutputStream(new File(destDir,
						newFileName)).getChannel();
				long size = fcin.size();
				fcin.transferTo(0, fcin.size(), fcout);
				fcin.close();
				fcout.close();
				copySizes = size;
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return copySizes;
	}
分享到:
评论
4 楼 MyTiny 2014-12-17  
为什么我测试的结果跟你相反呢,方法1比方法2快些,我写的方法1字节数组大小为1024,拷贝的文件大小为5000KB
3 楼 gqdy365 2014-08-29  
不是一般的快!
2 楼 lingxiajiudu 2014-07-08  
di1984HIT 写道
你没有用byte数组,肯定一种慢了

即使你用了byte数组,还是慢!第二种方法不仅快而且超超超级快,直接transferTo,就是一种zero-copy的方式...
1 楼 di1984HIT 2013-09-17  
你没有用byte数组,肯定一种慢了

相关推荐

    java经典算法合集

    然后,我们使用FileInputStream和FileOutputStream类来复制文件,并将文件扩展名从.java改为.jad。 在main函数中,我们使用File类来创建文件对象,并使用listFiles方法来获取d:\java目录下的所有文件。我们使用循环...

    java简单的文件复制粘贴

    * 灵活:Java 文件复制粘贴可以根据具体情况选择不同的文件复制算法和策略,满足不同应用场景的需求。 文件复制粘贴的应用场景 Java 文件复制粘贴有广泛的应用场景,如: * 文件管理:Java 文件复制粘贴可以用于...

    Java中实现复制文件或文件夹

    复制文件的算法相对简单,可以使用缓冲流提高读写数据的效率。下面是复制文件的步骤: 1. 创建文件输入流和输出流 2. 使用缓冲流读取源文件内容 3. 将读取的内容写入目标文件 4. 关闭流 在 Java 中,可以使用 ...

    JAVA作业文件复制

    文件复制,具体都是递归一下,没什么难点,大家参考参考。。。。。。。。。。。

    java文件资源管理系统

    Java文件资源管理系统是...总的来说,Java文件资源管理系统是一个综合性的项目,它涵盖了文件系统的操作、数据流的处理、压缩解压算法以及安全加密技术等多个方面,对于学习和提升Java开发者的技术能力具有很高的价值。

    Java 模拟文件管理器

    这个程序的核心在于使用Java的`File`类来代表文件和目录,并通过控制台界面来实现创建、删除、移动、复制以及列出文件和目录等常见文件管理功能。下面我们将深入探讨相关的Java知识点。 首先,`File`类是Java的`...

    java序列化原理与算法

    ### Java序列化原理与算法详解 #### 序言 在现代软件开发中,尤其是在网络通信和数据持久化领域,对象的序列化与反序列化扮演着至关重要的角色。Java作为一种广泛应用的编程语言,提供了强大的内置支持来实现序列化...

    JAVA文件管理器

    2. **复制文件**:JAVA提供了多种方法复制文件,比如使用FileInputStream和FileOutputStream组合,逐字节地读取源文件并写入目标文件。另外,java.nio.file包下的Files类提供了更简洁的复制方法,可以设置是否保留...

    GA_java.rar_JAVA 遗传算法_遗传算法 _遗传算法 java_遗传算法源码

    《JAVA实现遗传算法详解》 遗传算法是一种模拟自然选择和遗传机制的优化方法,它在计算机科学领域,尤其是在人工智能和机器学习中具有广泛的应用。本文将深入探讨如何使用Java编程语言来实现遗传算法,并以此为基础...

    java实现windows文件系统操作监控

    以上就是实现"java实现windows文件系统操作监控"所需的主要知识点,包括系统钩子、JNI、文件系统API、事件处理、文件操作、加密算法、多线程和异常处理等。在实际开发中,需要根据具体需求进行适当的调整和优化,以...

    Java模拟DOS文件系统

    它可能包含了各种测试场景,例如创建新文件、删除文件、复制文件、查找文件以及进行文件编辑等,以确保模拟的DOS文件系统能够正确工作。 在实现这些功能时,Java的`LinkedList`或`HashMap`等数据结构可以用来存储...

    Java,用java实现的所有算法.zip

    在这个名为"Java,用java实现的所有算法.zip"的压缩包中,很显然,它包含了一个Java项目,专注于实现各种算法。这样的资源对于学习和理解数据结构与算法在实际编程中的应用非常有价值。 首先,让我们探讨一下Java...

    二叉树的java算法

    二叉树算法在计算机科学中有着广泛的应用,例如在文件系统、编译器设计、搜索算法等领域。熟练掌握二叉树的遍历和操作方法对于提升编程能力以及解决实际问题至关重要。在实际编程时,可以结合`DoubleLinkedList`等...

    java命令行文件管理器

    4. **文件拷贝**:拷贝文件功能允许用户将一个文件复制到另一个位置,这对于备份或移动文件非常有用。 5. **打开路径**:用户可以查看当前工作目录或者切换到其他目录,方便在不同的文件夹之间导航。 6. **压缩与...

    java文件管理器

    这个程序集成了多种功能,包括切换目录(cd)、列出目录内容(dir)、复制文件(copy file)、重命名文件(rename file)以及对文件进行加密和解密操作。下面将详细介绍这些功能的实现原理和相关知识点。 1. **切换...

    java版文件管理器

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

    Java类文件加密专家

    Java 类文件加密专家通过分析Class文件的结构,使用1024位加密算法将Class文件数据加密,任何Java反编译工具均不可能对加密后的文件进行破解。 系统特点 1.采用纯C语言开发的内核算法,运行速度极快。 2.彻底...

    Java文件输入输出汇总

    - **File类**:这是Java中最基础的文件操作类,用于表示文件或目录的路径名。它提供了创建、删除、重命名文件以及获取文件属性等方法。 2. **流的概念** - **字节流**:Java中的`InputStream`和`OutputStream`是...

    java源码包---java 源码 大量 实例

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    基于遗传算法的高校自动排课系统(Java语言).zip

    - 源代码:实现遗传算法和排课逻辑的Java文件。 - 数据文件:存储课程、教师、教室等信息的文本或数据库文件。 - 测试用例:用于验证算法正确性的预设排课需求。 - 文档:项目介绍、算法解释、使用说明等。 ...

Global site tag (gtag.js) - Google Analytics