好记性不如烂笔头5-JAVA快速文件拷贝
2015-01-29 17:01
423 查看
如果使用luncene或者hadoop等文件系统的话,有大量的索引文件需要分发,可以利用现成的分发工具,也可以自己写程序进行快速的文件拷贝;
使用NIO进行快速的文件拷贝
package com.daily;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
/**
*NIO进行快速的文件拷贝,maxCount=128M,复制351M文件,耗时11001(毫秒)
*同样的文件,用(64 * 1024 *1024) - (32 * 1024)
,耗时18192(毫秒)
*@author 范芳铭
*/
public class EasyFastCopy {
publicvoid fileCopy(String in, String out) throws IOException {
FileChannelinChannel = new FileInputStream(new File(in)).getChannel();
FileChanneloutChannel = new FileOutputStream(new File(out)).getChannel();
try{
//如果内存大,这个值可以适当扩大;对大文件的复制有优势
//intmaxCount = (128 * 1024 * 1024);
//intmaxCount = (8 * 1024 * 1024);
int maxCount = (64 * 1024 * 1024) - (32 *1024);
longsize = inChannel.size();
longposition = 0;
while(position < size) {
position+= inChannel
.transferTo(position,maxCount, outChannel);
}
}finally {
if(inChannel != null) {
inChannel.close();
}
if(outChannel != null) {
outChannel.close();
}
}
}
publicstatic void main(String[] args) throws Exception {
longstart = System.currentTimeMillis();
EasyFastCopycopy = new EasyFastCopy();
copy.fileCopy("D:/ffm83/big.rar","D:/ffm83/temp/big.rar");
longend = System.currentTimeMillis();
System.out.println("快速文件拷贝耗时:" + (end - start) +"(毫秒)");
}
}
使用NIO进行快速的文件拷贝
package com.daily;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
/**
*NIO进行快速的文件拷贝,maxCount=128M,复制351M文件,耗时11001(毫秒)
*同样的文件,用(64 * 1024 *1024) - (32 * 1024)
,耗时18192(毫秒)
*@author 范芳铭
*/
public class EasyFastCopy {
publicvoid fileCopy(String in, String out) throws IOException {
FileChannelinChannel = new FileInputStream(new File(in)).getChannel();
FileChanneloutChannel = new FileOutputStream(new File(out)).getChannel();
try{
//如果内存大,这个值可以适当扩大;对大文件的复制有优势
//intmaxCount = (128 * 1024 * 1024);
//intmaxCount = (8 * 1024 * 1024);
int maxCount = (64 * 1024 * 1024) - (32 *1024);
longsize = inChannel.size();
longposition = 0;
while(position < size) {
position+= inChannel
.transferTo(position,maxCount, outChannel);
}
}finally {
if(inChannel != null) {
inChannel.close();
}
if(outChannel != null) {
outChannel.close();
}
}
}
publicstatic void main(String[] args) throws Exception {
longstart = System.currentTimeMillis();
EasyFastCopycopy = new EasyFastCopy();
copy.fileCopy("D:/ffm83/big.rar","D:/ffm83/temp/big.rar");
longend = System.currentTimeMillis();
System.out.println("快速文件拷贝耗时:" + (end - start) +"(毫秒)");
}
}
相关文章推荐
- 好记性不如烂笔头4-JAVA生成PDF文件
- 好记性不如烂笔头26-JAVA处理文件事务(4)
- 好记性不如烂笔头2-JAVA日期类型和转换
- 好记性不如烂笔头13-使用HttpServletResponse实现文件下载
- 好记性不如烂笔头42-javaWeb监听对象域属性变化(6)
- 【好记性不如烂笔头】常用的图片 文件格式 和 纹理格式
- 好记性不如烂笔头48-java拦截器-JDK自带动态代理和CGLIB效率比较(3)
- 好记性不如烂笔头3-JAVA生成缩略图
- 好记性不如烂笔头30-java应用中的过滤器Filter(2)
- 好记性不如烂笔头43-javaWeb中Session相关事件监听器(7)
- 好记性不如烂笔头32-java通过过滤器加载常用数据(4)
- 好记性不如烂笔头70-java中list的排序
- 好记性不如烂笔头7-JAVA生成EXCEL文件
- 好记性不如烂笔头18-java对Oracle的CLOB字段的操作
- 好记性不如烂笔头46-java拦截器-彻底理解动态代理的概念(1)
- 好记性不如烂笔头-java接口只能声明对象,但不能实例化对象
- 好记性不如烂笔头8-JAVA读取EXCEL文件
- 好记性不如烂笔头24-JAVA处理数据库事务(2) - 脏数据
- 好记性不如烂笔头25-JAVA处理数据库事务(3) - 事务回滚点
- 好记性不如烂笔头49-javaWeb框架struts2中的拦截器(4)