我正在寻找一种将符号链接复制到目录的方法。 实际上,通过我的应用程序,我可以将目录复制到目录,并将文件复制到目录。
我使用了commons.io.FileUtils库
这里是一个例子:
FileUtils.copyDirectoryToDirectory(file, destination);
现在,我想对符号链接做同样的事情。 例如,假设在/ home / user / Desktop / mysymlink中有一个符号链接 和一个存储库/ home / user / Desktop / destination
我想将mysymlink复制到目的地。
我尝试过这个:
Files.createSymbolicLink(new File("/path/to/symlink").toPath(), new File("/path/to/destination".toPath())
但是我走了这个错误:
java.nio.file.FileAlreadyExistsException: /home/nemtecl/Bureau/montest
at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:94)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
at java.base/sun.nio.fs.UnixFileSystemProvider.createSymbolicLink(UnixFileSystemProvider.java:458)
at java.base/java.nio.file.Files.createSymbolicLink(Files.java:1058)
at copyapp.file.CopySymbolicLink.copy(CopySymbolicLink.java:24)
at copyapp.model.CopyAppModel.copyFile(CopyAppModel.java:68)
at copyapp.instanciation.SwingApp.createController(SwingApp.java:116)
at copyapp.instanciation.SwingApp.<init>(SwingApp.java:30)
at copyapp.instanciation.SwingAppFactory.createApplication(SwingAppFactory.java:8)
at copyapp.client.mycp.main(mycp.java:29)
你能帮我吗:)?
答案 0 :(得分:0)
您对createSymbolicLink的使用有两个问题:正如RealSkeptic指出的那样,您的前两个参数是相反的(它们的顺序不应与ln -s
命令相同);与ln -s
不同,目的地可能不是目录,而必须是完整的非目录路径。
但是,对于复制现有的符号链接,实际上并不需要Files.createSymbolicLink。您想要复制链接本身,可以通过将LinkOption.NOFOLLOW_LINKS指定为常规副本来完成。
来自documentation of Files.copy:
NOFOLLOW_LINKS
不遵循符号链接。如果文件是符号链接,则将复制符号链接本身而不是链接目标。
所以你想要这样的东西:
Files.copy(
Paths.get("/home/user/Desktop/mysymlink"),
Paths.get("/home/user/Desktop/destination", "mysymlink"),
LinkOption.NOFOLLOW_LINKS,
StandardCopyOption.REPLACE_EXISTING);
(请注意,获取路径的正确方法是使用Paths.get,或者从Java 11开始,Path.of。没有理由使用java.io.File。)