簡體   English   中英

Java 7 NIO2 Files.walk NotDirectoryException

[英]Java 7 NIO2 Files.walk NotDirectoryException

我有一個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選項,但是即使目標跟隨在目錄下,我也不知道,如果我未通過FOLLOW_LINK選項,則Files.walk說不是目錄,為什么文件本身會打印出來,這是可以的,因為沒有遵循。

在簡歷中,為什么Files.walk無法橫穿我的目標,該目標是目錄並在后面?

API說

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

但這是一個目錄,並且僅跟隨它是因為將其視為常規文件,它將打印文件名,而不是鏈接,並設置了該目錄,但是Java無法識別為REGULAR目錄?

我的文件系統就像。

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

最有可能的是SymbolicApuntandoADirectorioLink.txtfile symbolic link父目錄的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM