是否有任何api可以使用java删除符号链接。 Files.delete(路径)没有用。请发表您的建议。
答案 0 :(得分:2)
Files.delete(Path)在符号链接上运行良好。您的代码中应该有另一个问题。
此代码示例有效(JAVA 8):
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
...
String symLinkName = "/some/path/to/symlink";
try {
if(Files.exists(Paths.get(symLinkName))) {
Files.delete(Paths.get(symLinkName));
}
} catch (IOException e) {
log.info("Cannot delete symbolic link " + symLinkName);
e.printStackTrace();
}
请记住,符号链接是UNIX概念,在Windows上不存在
答案 1 :(得分:0)
找到符号链接的更多信息here。如果你不能删除链接,你可以使用Java中的ProcessBuilder
- 类来完成它,并使用你的bash / cmd命令(取决于你使用过的系统)。
ProcessBuilder pb = new ProcessBuilder("<bash you use>", "rm", "<filepath>");
Process p = pb.start();
但是,你可以删除符号链接:
Files.delete("path");
目录必须为空。如果Path是符号链接,则删除该链接,而不是它所代表的目标。
答案 2 :(得分:0)
我会继续说,我认为
请记住,符号链接是UNIX概念,在Windows中不存在
不正确,至少不完全正确。 Windows确实具有符号和硬link的概念,这在某些方面可能与Unix概念有所不同。我可能完全错了。
但这不是我回答的重点,实际上我遇到了类似的问题,我无法删除实际上甚至不是符号链接的“符号链接”。我在Unix上创建了此符号链接,并将这些目录转移到Windows计算机上,并尝试使用Java NIO删除该“符号链接”,但由于java.nio.file.DirectoryNotEmptyException
而失败。如果我按照上面的链接中的指示在Windows上创建符号链接,则Java一切正常。
我知道这是非常具体的情况,但这是我的2美分。