繁体   English   中英

Java 7-Files.copy复制空文件

[英]Java 7 - Files.copy copying empty file

Files.copy无法正常工作。 复制的文件始终为0字节。 下面是代码片段

File sourceFile = new File(sorceFileName);
File destinationFile = new File(destinationFileName);
Files.copy(sourceFile.toPath(), destinationFile.toPath());

这是什么原因呢? 在Solaris OS上运行。

如果目标文件已经存在,则需要指定要替换的文件

Files.copy(sourceFile.toPath(), destinationFile.toPath(), StandardCopyOption.REPLACE_EXISTING);

您尚未发布任何堆栈跟踪,但是如果您不添加上述CopyOption并且目标文件确实存在,则将得到FileAlreadyExistsException ,如FileAlreadyExistsException注释javadoc中所述。

我相信您将需要再添加一个属性REPLACE_EXISTING

像这样: Files.copy(source, target, REPLACE_EXISTING); 在您的情况下,应为: Files.copy(sourceFile.toPath(), destinationFile.toPath(), REPLACE_EXISTING);

阅读http://docs.oracle.com/javase/tutorial/essential/io/copy.html ,希望对您有所帮助。 如果您想知道其他方式复制文件,你可能需要阅读这个这个

除非我严重怀疑Solaris的文件系统中存在巨大的错误,否则您的方案只有在源文件实际上为空的情况下才有可能。

因为您说的不是,所以API必须引发了异常并且您不知道。 可能的例外是:

  • FileAlreadyExistsException :目标文件已经存在; 使用其他职位提供的解决方案;
  • AccessDeniedException :meh,无法读取源/写入目标(许多可能的原因);
  • NoSuchFileException :目标文件中的路径包含一个不存在的路径元素;
  • FileSystemLoopException :在目标路径中的某个位置是一个自身循环的符号链接。

当然还有经典的IOException和严重的IOError ...

另外,由于从File对象生成Path ,因此可以具有InvalidPathException File不同,您不能使用包含当前编码中不可映射的字符序列的字符串创建Path对象(至少不使用所提供的默认FileSystem实现)。

您必须在某处有例外...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM