Java 复制文件时出现无声错误
我有以下复制文件的方法:Java 复制文件时出现无声错误,java,filesystems,nio,Java,Filesystems,Nio,我有以下复制文件的方法: public static void nioCopy(File source, File destination) { FileInputStream fis = null; FileOutputStream fos = null; FileChannel input = null; FileChannel output = null; try { fis = new FileInputStream(source)
public static void nioCopy(File source, File destination) {
FileInputStream fis = null;
FileOutputStream fos = null;
FileChannel input = null;
FileChannel output = null;
try {
fis = new FileInputStream(source);
fos = new FileOutputStream(destination);
input = fis.getChannel();
output = fos.getChannel();
input.transferTo(0, input.size(), output);
} catch (FileNotFoundException ex) {
Logger.getLogger(Utilities.class.getName()).log(Level.SEVERE, "Can't find either of input/output files.", ex);
} catch (IOException ex) {
Logger.getLogger(Utilities.class.getName()).log(Level.SEVERE, "Can't open either of input/output file for reading/writing", ex);
} finally {
try {
fis.close();
fos.close();
input.close();
output.close();
} catch (IOException ex) {
Logger.getLogger(Utilities.class.getName()).log(Level.SEVERE, "Error closing streams", ex);
}
}
}
我用它来复制文件,但有时会出现无声错误或未定义的行为,或者我不知道如何解释,这就是我得到的:
以下是我的资料来源:
-rw-r--r-- 1 nb9 team92 3.1G 2011-10-13 16:31 6443_6#5_1_6443_6#5_2.fastq.f.fq.gz
这里是目的地:
-rw-r--r-- 1 nb9 team92 2.0G 2011-10-13 16:49 6443_6#5_1_6443_6#5_2.fastq.f.fq.gz
在执行此过程时,我没有遇到任何异常,从外观上看,一切都应该成功,但当我开始解压缩文件时,我得到:
java.io.EOFException:ZLIB输入流意外结束
很明显,目的地比原来的目标低了1吉格
唯一的特点是,这两个文件都位于非常繁忙的lustre文件系统上。这可能会导致一些有趣的事情吗?被截断为2Gb的事实让我怀疑。我搜索了一下,它看起来像是一个。也可能是目标文件系统允许最大2Gb文件 从 目前,缓冲区大小限制为2GB(整数中可以表示的最大正数)。计划为Java 7更新的缓冲区将允许大缓冲区(大小和索引保持为长) 不管怎样,我只是想确定一下:
- 如果有空间,可以尝试将其复制到同一个文件系统上吗
- 你能试试ApacheCommonsIO吗?看起来是的
- 如果可以升级,请尝试使用Java 7,因为它已经过时了
异常
并查看结果,因为到目前为止,任何不是文件NotFoundException
或IOException
的错误都将是无声的。此外,传输到
有一个返回值。请检查它。问题:您确定目标文件系统可以处理大于2GB的文件吗o我试图cp
将一个大文件复制到fat32 FS,但复制没有完成,但我没有得到任何错误。是的,它确实支持它们,因为正如我所说的,它是一个lustre文件系统,是在考虑到这一点的情况下创建的。我有一个8gig的文件愉快地驻留在itI上。我刚刚查看了FileUtils.CopyFile的源代码,它看起来非常健壮。我我试试看这个问题是否仍然存在。