2017-02-10 42 views
2

我想遍历网络UNC路径中的文件,以便可以对它们进行操作,这有可能吗?java nio在符号链接中迭代文件

我想以下面的方式(见下面的代码),它没有列出文件。

但是,使用Windows资源管理器,我可以访问该文件夹,我可以看到,修改甚至删除它们。

// created with this command: mklink /D C:\Users\user\Desktop\repo \\serverIp\public\repo 
File repo = new File("C:\\Users\\user\\Desktop\\repo"); // symlink 

final Path dir = FileSystems.getDefault().getPath(repo.getCanonicalPath()); 

Files.walkFileTree(dir, new SimpleFileVisitor<Path>() { 
    @Override 
    public FileVisitResult preVisitDirectory(Path newDir, BasicFileAttributes attrs) throws IOException { 
     System.out.println(newDir.toAbsolutePath());     
     return FileVisitResult.CONTINUE; 
    } 

    @Override 
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { 
     System.out.println(file.toAbsolutePath()); 
     return FileVisitResult.CONTINUE; 
    } 
}); 

我是否正确创建了符号链接?

回答

2

我认为你需要使用FOLLOW_LINKS选项。

import static java.nio.file.FileVisitResult.*; 
Files.walkFileTree(dir, EnumSet.of(FOLLOW_LINKS), Integer.MAX_VALUE, new SimpleFileVisitor<Path>() { ...)) 
+0

不起作用如果在根目录是符号链接...也许它会工作,如果我把在另一个文件夹,然后作为一个子文件夹到根文件夹将遵循符号链接,但我需要的不是这样 –

+0

@EmrahMehmedov你能检查一下你的链接是否存在吗?类似于'Files.isSymbolicLink(Paths.get())'和'Files.exists(Paths.get(..))' –

+0

对我来说它是一个符号链接的根目录。 – viniciussss