java高效文件复制

java高效文件复制,java,file,io,file-copying,Java,File,Io,File Copying,我想知道复制大量文件的最佳方式。“最佳”需要澄清 我将委托给rsync,它非常擅长复制大量具有许多选项的文件。我不知道rsync有一个好的Java实现。“最佳”需要澄清 我将委托给rsync,它非常擅长复制大量具有许多选项的文件。我不知道rsync有一个很好的Java实现。请从Google的库中查看该类。它包含一些用于复制整个文件的实用方法。请从Google的库中查看该类。它包含一些复制整个文件的实用方法。像往常一样,有雅加达公用程序:像往常一样,有雅加达公用程序:如果您在本地复制文件,您应该使

我想知道复制大量文件的最佳方式。

“最佳”需要澄清

我将委托给rsync,它非常擅长复制大量具有许多选项的文件。我不知道rsync有一个好的Java实现。

“最佳”需要澄清


我将委托给rsync,它非常擅长复制大量具有许多选项的文件。我不知道rsync有一个很好的Java实现。

请从Google的库中查看该类。它包含一些用于复制整个文件的实用方法。

请从Google的库中查看该类。它包含一些复制整个文件的实用方法。

像往常一样,有雅加达公用程序:

像往常一样,有雅加达公用程序:

如果您在本地复制文件,您应该使用FileChannel.transferFrom()或FileChannel.transferTo()。例如:

FileInputStream is = new FileInputStream(file); FileOutputStream fos = new FileOutputStream(oFile); FileChannel f = is.getChannel(); FileChannel f2 = fos.getChannel(); f.transferTo(0, f.size(), f2); f2.close(); f.close(); FileInputStream is=新的FileInputStream(文件); FileOutputStream fos=新的FileOutputStream(oFile); FileChannel f=is.getChannel(); FileChannel f2=fos.getChannel(); f、 转移到(0,f.size(),f2); f2.关闭(); f、 close(); 在许多平台上,复制将通过DMA进行,并且速度将尽可能快


如果您通过网络复制文件,那么您的情况就不同了。如果某些文件可能已经存在,那么您应该研究rsync,因为它可以避免传输两侧相同的部分文件。如果最常见的情况是目标计算机上不存在文件,那么您需要使用类似于scp的东西。关于这一点,请参见问题。

如果您在本地复制文件,则应使用FileChannel.transferFrom()或FileChannel.transferTo()。例如:

FileInputStream is = new FileInputStream(file); FileOutputStream fos = new FileOutputStream(oFile); FileChannel f = is.getChannel(); FileChannel f2 = fos.getChannel(); f.transferTo(0, f.size(), f2); f2.close(); f.close(); FileInputStream is=新的FileInputStream(文件); FileOutputStream fos=新的FileOutputStream(oFile); FileChannel f=is.getChannel(); FileChannel f2=fos.getChannel(); f、 转移到(0,f.size(),f2); f2.关闭(); f、 close(); 在许多平台上,复制将通过DMA进行,并且速度将尽可能快



如果您通过网络复制文件,那么您的情况就不同了。如果某些文件可能已经存在,那么您应该研究rsync,因为它可以避免传输两侧相同的部分文件。如果最常见的情况是目标计算机上不存在文件,那么您需要使用类似于scp的东西。有关详细信息,请参见问题。

从何处复制到何处?地方的通过网络?是的,你需要详细说明。你的目标是什么?我需要找到一种非常快速的方法来将大量文件从一个地方复制到另一个地方,以简化你可以使用的代码,例如Commons IO(参见Guillaume的答案),但无论你选择哪个库,都不会改变这样一个事实:由于磁盘IO的限制,复制(而不是移动)大量文件的速度都会很慢。哦,这里与NIO相关的答案可能会引起您的兴趣:从何处复制到何处?地方的通过网络?是的,你需要详细说明。你的目标是什么?我需要找到一种非常快速的方法来将大量文件从一个地方复制到另一个地方,以简化你可以使用的代码,例如Commons IO(参见Guillaume的答案),但无论你选择哪个库,都不会改变这样一个事实:由于磁盘IO的限制,复制(而不是移动)大量文件的速度都会很慢。哦,这里与NIO相关的答案可能会让您感兴趣:唯一的问题是目前还没有发布版本的番石榴-唯一的选择是从svn中检查主干源。(如果我错了,请纠正我。)番石榴已经发布了很长一段时间了,现在唯一的问题是还没有发布版本的番石榴-唯一的选择是从他们的svn中检查主干源。(如果我错了,请纠正我。)Guava已经发布很长一段时间了在撰写本文时,FileUtils.copyFile()使用IOUtils.copy(),它只从InputStream读取并写入OutputStream。它不会检测到一种特殊情况,即您有一个FileInputStream和一个FileOutputStream,因此可以通过通道进行更快的复制。因此,如果目标是尽可能快地进行拷贝,并且拷贝是本地的,那么这将不是最快的方法。这不是最快的方法。在编写本文时,FileUtils.copyFile()使用IOUtils.copy(),它只从InputStream读取数据并写入OutputStream。它不会检测到一种特殊情况,即您有一个FileInputStream和一个FileOutputStream,因此可以通过通道进行更快的复制。因此,如果目标是尽可能快地进行拷贝,并且拷贝是本地的,那么这将不是最快的方法。不会是最快的方式。1:我一定很喜欢。但恐怕大多数孩子对它了解不多+1:我一定很喜欢。但恐怕大多数孩子对它了解不多。