Files.copy未按预期工作。复制的文件始终为0字节。 以下是代码段
File sourceFile = new File(sorceFileName);
File destinationFile = new File(destinationFileName);
Files.copy(sourceFile.toPath(), destinationFile.toPath());
这是什么原因?在Solaris OS上运行。
答案 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我希望它会有所帮助。如果您想了解其他复制文件的方法,可以阅读this和this。
答案 2 :(得分:0)
除非Solaris文件系统中存在一个巨大的错误,我才非常怀疑,只有在源文件实际为空的情况下才能实现。
既然你说它不是,那么API必须抛出一个异常而你却不知道。可能的例外是:
FileAlreadyExistsException
:目标文件已存在;使用其他帖子中提供的解决方案; AccessDeniedException
:meh,无法读取源/写目的地(很多可能的原因); NoSuchFileException
:目标文件中的路径包含一个不存在的路径元素; FileSystemLoopException
:目标路径中的某个地方是一个循环自身的符号链接。当然还有经典IOException
和关键IOError
......
此外,由于您从Path
个对象生成File
,因此可以InvalidPathException
;与File
不同,您无法从包含当前编码中无法映射的字符序列的字符串创建Path
个对象(至少不提供默认的FileSystem
实现)。< / p>
你必须在某个地方有例外......