private static final long VIRTUAL_MEMORY_SIZE = 512 * 1024 * 1024;
public static void copy(File src, File dst) throws Exception
{
try
{
InputStream srcIo = new FileInputStream(src);
if (!dst.exists())
{
dst.createNewFile();
}
FileChannel srcChannel = ((FileInputStream) src).getChannel();
FileChannel dstChannel = new FileOutputStream(dst).getChannel();
if (VIRTUAL_MEMORY_SIZE > byteCount)
{
srcChannel.transferTo(0, srcChannel.size(), dstChannel);
} else
{
long postion = 0;
while (byteCount > postion)
{
long needCopyByte = byteCount - postion;
if (needCopyByte > VIRTUAL_MEMORY_SIZE)
{
needCopyByte = VIRTUAL_MEMORY_SIZE;
}
postion += srcChannel.transferTo(postion, needCopyByte,
dstChannel);
}
}
srcChannel.close();
dstChannel.close();
} catch (FileNotFoundException e)
{
StringBuilder msg = new StringBuilder(src.getAbsolutePath());
msg.append("文件不存在!");
log.error(msg.toString(), e);
throw e;
} catch (IOException e)
{
StringBuilder msg = new StringBuilder(src.getAbsolutePath());
msg.append("复制到");
msg.append(dst.getAbsolutePath());
msg.append("文件失败!");
log.error(msg.toString(), e);
throw e;
}
}