0

我正在使用 Java NIO2 得到“太多级别的符号链接”:- 这是在 Unix 上运行的。任何想法都会有很大帮助。谢谢。

在我调用的代码深处

Path currentFolder = Paths.get(currentFolder, date);

并且在流程中的某个时刻 - 我正在尝试按照以下方法获取当前文件夹..

public Path getNewFolder() {
        return currentFolder.resolve("test").resolve("new");
        //where "test" and "new" contains date in between the path. example currentFolder path: "/base/test/2014106/new"
}

但我得到以下例外..

java.nio.file.FileSystemException: /base/test/2014106/new: Too many levels of symbolic links
  at sun.nio.fs.UnixException.translateToIOException(UnixException.java:91)
  at sun.nio.fs.UnixException.asIOException(UnixException.java:111)
  at sun.nio.fs.UnixDirectoryStream$UnixDirectoryIterator.readNextEntry(UnixDirectoryStream.java:171)
  at sun.nio.fs.UnixDirectoryStream$UnixDirectoryIterator.hasNext(UnixDirectoryStream.java:201)
  at java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:198)
  at java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:69)
  at java.nio.file.Files.walkFileTree(Files.java:2591)
  at java.nio.file.Files.walkFileTree(Files.java:2624) 
4

1 回答 1

1

当您有符号链接循环时,通常会发生这种情况。

例如,如果您这样做ln -s . here,则该目录将有一个here指向其父目录的子目录。这意味着您可以永远递归到它:

$ pwd
/home/me

$ ls -ld here
lrwxrwxrwx 1 me users 1 Apr 16 16:18 here -> .

$ cd here

$ pwd
/home/me/here

$ cd here/here/here/here/here/here/here

$ pwd
/home/me/here/here/here/here/here/here/here/here

由于您的堆栈跟踪被截断,因此很难准确说明您应该如何处理它。选项包括:

  • 删除链中的符号链接,使其不会循环
  • 迭代时检测循环
  • 在一定深度停止递归
于 2014-04-16T23:27:30.447 回答