Java 7 NIO2 Files.walk NotDirectoryException - PullRequest
0 голосов
/ 11 июня 2018

У меня есть SymbolicLink, указывающий на его родительский каталог, да, это странно, но я пытался понять 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, но я не знаю, даже когдацель состоит в том, чтобы следовать, что является каталогом, почему Files.walk говорит, что это не каталог, если я не передам опцию FOLLOW_LINK печатается сам файл, который в порядке, потому что не следует.

В резюме, почему Files.walk не можетпересекает мою цель, которая является каталогом и является следующим ??

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 Ответ

0 голосов
/ 11 июня 2018

Скорее всего 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
...