`
mzh_2008beijing
  • 浏览: 230397 次
  • 性别: 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作业文件复制

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

    Java类文件加密专家

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

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

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

    JAVA上百实例源码以及开源项目

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

    java源码包4

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

    java源码包3

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

    Java思维导图xmind文件+导出图片

    构建分布式架构最重要因素 CDN静态文件访问 分布式存储 分布式搜索引擎 应用发布与监控 应用容灾及机房规划 系统动态扩容 分布式架构策略-分而治之 从简到难,从网络通信探究分布式通信原理 基于消息方式...

    java源码包2

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

    JAVA上百实例源码以及开源项目源代码

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

    模拟退火算法及TSP问题Java源码

    TSP问题用模拟退火算法解决的Java源码,本源码为src文件夹,你只需要将文件内容复制到你的工程源码文件中即可。

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系...

    Java游戏扫雷-简易复制品.zip

    java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...

    Java开发技术大全(500个源代码).

    CopyFile.java 文件复制实例 dir.java 显示目录下的所有文件和目录 encrypt.java 文件加密 FileList.java 自己实现的一个文件名称枚举类 MyDataIO.java 数据输入输出示例 MyFileOutput.java 将键盘读入的文字...

    算法_英文第4版_RobertSedgewick(纯原版彩图可编辑复制)

    算法英文版第四版,完全是出版社的原版PDF文件,彩图复制编辑,非常适合学习参考阅读。代码也可以省了很多手抄的,加快阅读效率。 《算法(英文版•第4版)》作为算法领域经典的参考书,全面介绍了关于算法和数据...

    中文分词工具word-1.0,Java实现的中文分词组件多种基于词典的分词算法

    word分词是一个Java实现的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。 能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。 同时提供了Lucene...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系...

    一个使用Java写的经典扫雷游戏的复制品,源码.zip

    java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...

    广工java实验作业程序

    这个可以说是非常垃圾了 哈哈 你如果只想及格这个绝对可以满足你了 要是想得优秀还是要自己努力啊

    JAVA 范例大全 光盘 资源

    实例38 Java字符串与文件的互转 88 实例39 截取带汉字的字符串 91 实例40 替换字符串中的部分字符 92 实例41 Java字符串之密码加密 93 实例42 正则表达式验证字符串 95 第7章 Java常用类 98 实例43 数字的舍入...

Global site tag (gtag.js) - Google Analytics