gpt4 book ai didi

java - 使用 Files.copy() 选择文件名

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:57 24 4
gpt4 key购买 nike

我在 /tmp 中有一个临时文件,我想将其存档,所以我尝试了:

import java.nio.file.Files;
[...]

Path source = Paths.get("/tmp/path/to/file_123456789.xml");
Path destination = Paths.get("/path/to/archive/dir/file.xml");
Files.copy(source, destination).

失败是因为:

/path/to/archive/dir/file.xml is not a directory

我知道了!但我只想选择目标文件的名称。

到目前为止,我有一些不满意的解决方案:

  • 使用 Files.createTempDirectory 创建临时目录,然后将临时文件移动到其中,重命名,然后将其移动到目标目录。
  • 复制存档目录中的临时文件,然后在那里重命名。但是如果重命名失败,我的存档目录中有一些垃圾。
  • 在存档目录中创建一个空文件,并手动将源文件的内容复制到其中。

可能存在更清洁的解决方案。你知道吗?

最佳答案

在Jon的帮助下,我发现/path/to/archive/dir其实是一个文件。该错误消息具有误导性,因为它说 /path/to/archive/dir/file.xml 不是目录,即使问题来自 /path/to/archive/dir.

linux下复现步骤:

1) 创建文件/tmp/fakedir

touch /tmp/fakedir

2) 在Java中,执行这段代码:

Path tempFile = Files.createTempFile("test", "test");
Files.copy(tempFile, Paths.get("/tmp/fakedir/destination.xml"));

您收到错误消息:

Exception in thread "main" java.nio.file.FileSystemException: /tmp/fakeDir/destination.xml: is not a directory
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:91)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixCopyFile.copyFile(UnixCopyFile.java:243)
at sun.nio.fs.UnixCopyFile.copy(UnixCopyFile.java:581)
at sun.nio.fs.UnixFileSystemProvider.copy(UnixFileSystemProvider.java:253)
at java.nio.file.Files.copy(Files.java:1271)
at Test.main(Test.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

关于java - 使用 Files.copy() 选择文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29102008/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com