首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 7 NIO2 Files.walk NotDirectoryException

Java 7 NIO2 Files.walk NotDirectoryException
EN

Stack Overflow用户
提问于 2018-06-11 12:30:38
回答 1查看 573关注 0票数 1

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

我有下面的代码。

代码语言:javascript
复制
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);
    }        
}    

但抛出

代码语言:javascript
复制
Exception in thread "main" java.nio.file.NotDirectoryException: C:\Users\Documents\SymbolicLinks\Folder\SubDirectorio\SymbolicApuntandoADirectorioLink.txt

我使用的是FollowLink选项,但我甚至不知道目标是下面这个目录,这就是为什么Files.walk说不是目录的原因,如果我不传递FOLLOW_LINK选项,就打印文件本身,这是可以的,因为没有遵循。

在简历中,为什么Files.walk不能横过我的目标,那就是一个目录,下面是??

API说

代码语言:javascript
复制
Checked exception thrown when a file system operation, intended for a directory, fails because the file is not a directory.

但是它是一个目录,只是因为is把它当作一个常规文件,它会打印文件名,而链接是下面的,目录是设置的,但是Java不承认它是一个常规目录?

我的FileSystem有点像。

代码语言:javascript
复制
C:\Users\Documents\SymbolicLinks\Folder\SubDirectorio
   ....SymbolicApuntandoADirectorioLink.txt -->SymbolicLink pointing to parent directory SubDirectorio
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-11 13:13:38

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

代码语言:javascript
复制
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代码的

代码语言:javascript
复制
Exist: false
Directory: true
Symbolic: true
RegularFile: false
Exception in thread "main" java.nio.file.NotDirectoryException: C:\temp\dir1\file.link    

运行dir.link代码的

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50797796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档