Java 7 - Files.copy复制空文件

时间:2014-04-07 15:25:53

标签: java

Files.copy未按预期工作。复制的文件始终为0字节。 以下是代码段

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

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

3 个答案:

答案 0 :(得分:1)

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

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

您尚未发布任何堆栈跟踪,但如果您未添加上述CopyOption且目标文件确实存在,您将获得FileAlreadyExistsException,如{{3 }和comments by @fge

答案 1 :(得分:0)

我相信您需要再添加一个属性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我希望它会有所帮助。如果您想了解其他复制文件的方法,可以阅读thisthis

答案 2 :(得分:0)

除非Solaris文件系统中存在一个巨大的错误,我才非常怀疑,只有在源文件实际为空的情况下才能实现。

既然你说它不是,那么API必须抛出一个异常而你却不知道。可能的例外是:

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

当然还有经典IOException和关键IOError ......

此外,由于您从Path个对象生成File,因此可以InvalidPathException;与File不同,您无法从包含当前编码中无法映射的字符序列的字符串创建Path个对象(至少不提供默认的FileSystem实现)。< / p>

你必须在某个地方有例外......