关于copy文件,一般都用流来读取文件,然后再写入另一个文件。
下面用java NIO包中的FileChannel 类中提供的transferFrom方法来进行copy文件,该方法比比Apache IO包中提供的要快。
copy原理代码如下:
File file = new File("D:/workspace/OJ平台/MyProject/src/test3.xml");
File outFile = new File("D:/workspace/OJ平台/MyProject/src/aaa.xml");
if (outFile.exists())
{
outFile.delete();
}
FileInputStream inStream = new FileInputStream(file);
FileOutputStream outStream = new FileOutputStream(outFile);
outStream.getChannel().transferFrom(inStream.getChannel(), 0, Long.MAX_VALUE);
System.out.println(outFile.length() == file.length());
标准结构的代码如下 :
public static void copyFile(File srcFile, File destFile) throws IOException
{
if (!srcFile.exists())
{
throw new FileNotFoundException("Source '" + srcFile + "' does not exist");
}
if (srcFile.isDirectory())
{
throw new IOException("Source '" + srcFile + "' exists but is a directory");
}
if (srcFile.getCanonicalPath().equals(destFile.getCanonicalPath()))
{
throw new IOException("Source '" + srcFile + "' and destination '" + destFile + "' are the same");
}
if (destFile.exists())
{
if (destFile.delete())
{
if (!destFile.createNewFile())
{
throw new IOException("create file " + destFile.getAbsolutePath() + " failed.");
}
}
else
{
throw new IOException("delete file " + destFile.getAbsolutePath() + " failed.");
}
}
if ((destFile.getParentFile() != null) && (!destFile.getParentFile().exists())
&& (!destFile.getParentFile().mkdirs()))
{
throw new IOException("Destination '" + destFile + "' directory cannot be created");
}
FileInputStream fis = null;
FileOutputStream fos = null;
try
{
fis = new FileInputStream(srcFile);
fos = new FileOutputStream(destFile);
long timeCopy = System.currentTimeMillis();
fos.getChannel().transferFrom(fis.getChannel(), 0, Long.MAX_VALUE);
if (logger.isDebugEnable())
{
timeCopy = System.currentTimeMillis() - timeCopy;
logger.debug("copy file " + srcFile.getAbsolutePath() + " cost " + timeCopy + " ms.");
}
}
finally
{
CloseUtils.closeQuietly(fos);
CloseUtils.closeQuietly(fis);
}
if (srcFile.length() != destFile.length())
{
throw new IOException("Failed to copy full contents from '" + srcFile + "' to '" + destFile + "'");
}
if (destFile.setLastModified(srcFile.lastModified()))
{
if (logger.isDebugEnable())
{
logger.debug("set file '" + srcFile.getAbsolutePath() + "' lastModified failure.");
}
}
}
使用程序来copy文件,需要重新生成一个文件,因此该文件的最后修改日期是该文件的创建日期,与源文件是不相同的,
因此destFile.setLastModified(srcFile.lastModified())) 使用该方法是不能修改文件的最后修改日期的。
但在windows上面copy文件,生成新文件的最后修改日期与原文件的最后修改日期是一致的。
分享到:
相关推荐
总结来说,面对损坏文件,首先要了解可能的损坏原因,然后通过多种方式来识别损坏状态。一旦确认文件损坏,可以尝试利用备份、系统功能、修复工具或第三方软件进行恢复。在实际操作中,预防总是优于治疗,定期备份和...
标题中的“Fastcopy文件拷贝copy”指的是一款名为Fastcopy的高效文件复制软件。Fastcopy因其极快的文件拷贝速度而闻名,它是由日本开发者设计并开发的一款工具,旨在提供比操作系统自带的文件复制功能更快速、更稳定...
1. **覆盖与保留原文件**:在目标位置已有同名文件时,复制操作可以选择覆盖原有文件或保留原文件。大多数工具会提供选项供用户选择。 2. **权限与所有权**:在多用户系统中,复制的文件和目录会继承源文件的权限和...
"copy文件的bat程序"就是这样一个实用程序,它利用内部的`copy`命令来批量复制文件。下面我们将深入探讨如何创建和使用这样的BAT脚本,以及如何利用它实现高效、快速的文件复制。 首先,让我们了解`copy`命令的基本...
FastCopy,就是这样一款专为提升文件复制效率而设计的工具,它以其卓越的性能和易用性赢得了广泛赞誉。 FastCopy,正如其名,是一款专注于快速复制文件的实用软件。它的核心优势在于利用高效的文件读写机制,最大...
FastCopy是一款高效、实用的文件复制工具,尤其在局域网环境中的文件传输表现卓越。它以其快速的拷贝速度和稳定的操作性能赢得了广大用户的喜爱。FastCopy在处理大量数据或者大文件时,能显著提高文件拷贝的效率,极...
Java文件操作一例:Copy 复制文件,虽然是复制文件,不过通过本源码你可以学习很多相关的Java基础技巧,比如Java对文件的事件处理、取得目录内容的事件处理、如何弹出文件选择器、如何得到选择文件的绝对路径、如何...
Fastcopy是最快的文件拷贝工具。磁盘间相互拷贝文件是司空见惯的事情,通常情况都是利用WINDOWS自带的复制粘贴功能来实现的。这样做在数目较小的情况下倒也没什么问题,但是数目较大时,系统自带的复制功能就有些...
FastCopy 是一款高效、易用的文件同步工具,尤其在处理大量数据的拷贝和同步任务时,它展现出了显著的优势。这款工具以其快速、稳定和强大的功能在IT行业内备受青睐。本文将深入探讨FastCopy的核心特性、工作原理...
**FastCopy文件拷贝软件详解** FastCopy是一款高效、便捷的文件复制工具,尤其在处理大量数据或大文件时,其速度表现优异,优于传统的Windows系统自带的复制粘贴功能,甚至比DOS下的robocopy命令也更具优势。这款...
标题中的“FastCopy”是一款高效、快速的文件复制工具,专为处理大文件拷贝而设计。这款软件在处理大量数据或大型文件如高清电影时,能显著提高复制速度,从而节省用户的时间。FastCopy以其优秀的性能和易用性,在...
FastCopy是一款在IT行业内备受推崇的文件复制工具,尤其因其强大的增量复制功能而闻名。它能够显著提高文件复制的效率,节省时间和资源,尤其对于处理大量数据的场景,如系统部署、数据备份等,FastCopy的表现尤为...
总的来说,Copy Handler作为一款优秀的文件复制工具,以其高效的处理能力、丰富的功能和人性化的操作,极大地提升了文件复制的效率,简化了繁琐的文件管理工作,是个人用户和企业用户提升工作效率的好帮手。...
这时,FastCopy 2.01就成为了一款不可或缺的利器,它的出现极大地提升了批量文件操作的速度,让繁重的文件转移变得轻而易举。 FastCopy是一款源自日本的开源软件,专为追求效率的用户设计。其核心特性就是“快速”...
1. `FastCopy.chm`:这是一个帮助文件,通常包含了软件的使用指南、功能介绍以及常见问题解答,用户可以通过这个文件学习如何操作FastCopy。 2. `FastEx64.dll` 和 `FastExt1.dll`:这些是动态链接库文件,它们包含...
1. **多线程处理**:Fastcopy支持多线程操作,可以同时处理多个文件或文件夹的复制工作,充分利用多核处理器的优势,显著提高复制速度。 2. **优化的缓存机制**:Fastcopy拥有高效的缓存管理策略,能够减少磁盘I/O...
FastCopy 是 Windows 平台上最快的文件拷贝、删除软件。由于其功能强劲,性能优越,一时间便超越相同类型的所有其他软件。由于FastCopy64位软件十分小巧,你甚至可以在安装后,直接将安装目录中的文件复制到任何可...
iCopy是一款专为iPhone用户设计的数据管理工具,其2.2.4版本的更新文件主要针对设备的面容识别功能和数据备份与恢复进行了优化。在本次更新中,开发者可能着重提升了iCopy对于iPhone设备上面容ID(Face ID)的兼容性...
相比于传统的文件复制方式,ha_fastcopy能够有效减少I/O等待时间,提高硬盘读写速度,尤其是在复制大文件或大量小文件时,其优势尤为突出。这是因为ha_fastcopy在执行COPY操作时,会尽可能地减少系统资源的占用,...
1. 用鼠标选择要复制的文件:单击文件一次,再次单击可以选择多个文件。 2. 使用快捷键Ctrl+C复制选中的文件。 3. 导航到目标位置,然后使用Ctrl+V粘贴文件。 4. 或者,可以直接将选中的文件拖放到目标文件夹中。 *...