有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

NIOJava7NIO2文件。走不走目录异常

我有一个符号指向他的父目录是的,很奇怪,但我试图理解FileSystemLoopException我已经做到了。但另一个问题出现了

我有以下代码

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

我正在使用FollowLink选项,但我不知道目标是follow,这是一个目录,为什么是文件。walk说如果我没有通过FOLLOW\u链接选项,那么它不是一个目录。链接选项被打印到文件本身,这是正常的,因为它不是FOLLOW

在简历为什么文件。步行不能横穿我的目标,这是一个目录,是遵循

API说

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

但是它是一个目录,并且是follow,因为它被视为一个常规文件,它会打印文件名,而不是链接follow,并且设置了目录,但是Java不能识别为常规目录

我的文件系统是这样的

C:\Users\Documents\SymbolicLinks\Folder\SubDirectorio
   ....SymbolicApuntandoADirectorioLink.txt -->SymbolicLink pointing to parent directory SubDirectorio

共 (1) 个答案

  1. # 1 楼答案

    很可能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