代码之家  ›  专栏  ›  技术社区  ›  chiperortiz

Java 7 NIO2文件

  •  1
  • chiperortiz  · 技术社区  · 7 年前

    我有一个指向他的父目录的密码,是奇怪的,但是我试着去理解,我已经做了。但另一个问题出来了。

    我有以下代码。

    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    public final class FileLoopSystemException{
        private final Path target = Paths.get("C:\\Users\\Documents\\SymbolicLinks\\Folder\\SubDirectorio\\SymbolicApuntandoADirectorioLink.txt");
        public static void main(String[] args)throws Exception{
             final FileLoopSystemException clazz = new FileLoopSystemException();
             clazz.walk();
        }
        private void walk()throws Exception{
             System.out.println("Exist: "+Files.exists(target));//false
             System.out.println("Directory: "+Files.isDirectory(target));//true
             System.out.println("Symbolic: "+Files.isSymbolicLink(target));//true
             System.out.println("RegularFile: "+Files.isRegularFile(target));//false
             final long count = Files.walk(target,java.nio.file.FileVisitOption.FOLLOW_LINKS)
                .peek(a->System.out.println(Files.isSymbolicLink(a)+" "+a))
                .count();
             System.out.println("count = " + count);
        }        
    }    
    

    但投掷

    Exception in thread "main" java.nio.file.NotDirectoryException: C:\Users\Documents\SymbolicLinks\Folder\SubDirectorio\SymbolicApuntandoADirectorioLink.txt
    

    我正在使用follow link选项,但我不知道目标是follow,这是一个目录,为什么files.walk说如果我不通过follow_link选项,那么它就不是一个目录,打印文件本身,这是可以的,因为它不是follow。

    在resume why files.walk中,无法遍历我的目标目录,该目录是follow??

    API说

    Checked exception thrown when a file system operation, intended for a directory, fails because the file is not a directory.
    

    但是它是一个目录,只是因为它被当作一个普通文件来处理,它会打印文件名,而不是链接,目录被设置,但是Java不被识别为一个普通目录。

    我的文件系统是这样的。

    C:\Users\Documents\SymbolicLinks\Folder\SubDirectorio
       ....SymbolicApuntandoADirectorioLink.txt -->SymbolicLink pointing to parent directory SubDirectorio
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   SubOptimal    7 年前

    很可能 SymbolicApuntandoADirectorioLink.txt 是一个 file symbolic link 到父目录,而不是 directory symbolic link .

    cd c:\temp
    mkdir dir1
    cd dir1
    mklink file.link ..
    mklink /d dir.link ..
    dir
    ...
    11/06/2018  15:03    <SYMLINKD>     dir.link [..]
    11/06/2018  15:02    <SYMLINK>      file.link [..]
    

    运行代码 file.lnk 失败了

    Exist: false
    Directory: true
    Symbolic: true
    RegularFile: false
    Exception in thread "main" java.nio.file.NotDirectoryException: C:\temp\dir1\file.link    
    

    运行代码 dir.link 失败了

    Exist: true
    Directory: true
    Symbolic: true
    RegularFile: false
    true C:\temp\dir1\dir.link
    Exception in thread "main" java.io.UncheckedIOException: java.nio.file.FileSystemLoopException: C:\temp\dir1\dir.link\dir1\dir.link