2014-04-16 28 views
0

我得到「太多級別的符號鏈接」我正在使用Java NIO2: - 這是在Unix上運行的。任何想法都會有很大的幫助。謝謝。使用Java NIO的符號鏈接級別過高2 - Paths.get(workFolder,timestamp);

我打電話

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

,並在流動某一時刻的代碼深處 - 我試圖讓currentfolder如在下面的方法..

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) 

回答

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 

由於您的堆棧跟蹤被截斷,這是很難說正是你應該做的是什麼。選項包括:

  • 刪除鏈中的一個符號鏈接,因此而在一定的深度
+0

這是正常工作迭代

  • 停止遞歸,直到我們重新啓動了不循環
  • 檢測循環系統。我們在這裏嘗試的是將文件從一個位置複製到其他位置。 –

  • +0

    從上面的代碼片段..我不知道它是如何創建符號鏈接.. –

    +0

    它可能不是。理論是已經有一個。 –