File.isFile()和File.isDirectory()都返回false

我有一个名为“aaaäaa.xls”的文件

为此, File.isFile()File.isDirectory()返回false ? 为什么它在Linux返回false

请尝试以下代码示例

 if(!pFile.exists()){ throw new FileNotFoundException(); } boolean isDir = pFile.isDirectory(); boolean isFile = pfile.isFile(); 

该文件不是文件

如果它不是目录,并且另外满足其他系统相关标准

如果抛出exception,则必须检查文件路径。

根据文件 :

public boolean isFile()

返回:当且仅当此抽象路径名表示的文件存在且为普通文件时才返回 true; 否则是假的。

在此基础上,您的文件不存在或不是普通文件。

第一个可能的原因:

  1. 文件不存在;
  2. 文件无法访问;
  3. 文件名错误;
  4. 程序中使用的字符编码与创建文件时使用的字符编码不同。

第二个可能的原因:

  • 它不是常规文件 。

或者它是JVM中的一个错误。 它也有可能,但不太可能。 例如,我立刻遇到路径名中带有感叹号的问题 – 错误4523159 。

如果要以任何方式访问该文件,请考虑调用dir.listFiles()并使用其返回值。


(答案部分基于这个post )

检查此文件的父目录的权限。 其中一些目录可能没有当前用户的执行权限。

  • 目录的执行位允许受影响的用户输入它并访问其中的文件和目录

我也遇到过file.isFile()在文件上返回false问题,大概是因为该文件不是“常规”的,正如在这个问题的其他回答中所指出的那样。 作为一种解决方法,我使用file.listFiles() != null ,这似乎提供了我需要的function。 根据Java File API :

如果此抽象路径名不表示目录,则此方法返回null。 否则返回一个File对象数组。

我在.txt文件上测试isFile()时遇到了同样的错误。 问题是我创建的文件在名称上有.txt something.txt 。 然后我将something.txt重命名为something.txt something

我真的很生气

我知道这个问题是五年前提出的,事实上,我得到了它,因为我遇到了同样的问题,我正在创建给定路径中所有文件的List,如下所示:

 File files = Paths.get(path).toFile(); List filenames = Arrays.asList(files.list()); 

问题是,该路径包含一个名为testing_testing的目录,该目录作为列表的一部分返回。

然后,当我做以下测试时:

 for (String filename : filenames) { if (Files.isDirectory(Paths.get(filename))) { System.out.println(filename + " is a directory."); } else { if(filename.equals("testing_testing")) { System.out.println("Is this a directory?: " + Files.isDirectory(Paths.get(filename))); System.out.println("Does the file exists?: " + Files.exists(Paths.get(filename))); System.out.println("Is this a regular file?: " + Files.isRegularFile(Paths.get(filename))); System.out.println("Is this a symbolic link?: " + Files.isSymbolicLink(Paths.get(filename))); } } } 

它为Files.isDirectory()Files.exists()返回false。

稍微修改一下,我注意到我只获取了文件名,没有完整的路径,这意味着我只是将Paths.get()传递给Paths.get()而不是传递完整路径来获取它,这就是为什么它不存在并且在两种情况下都返回false。

我将代码更改为:

 Paths.get("C:\test", filename); 

现在测试返回正确的值。 我不知道你是否已经想到这一点,因为你问过这已经五年了。 但对于有相同问题的任何人,请确保您将正确的路径传递给您的文件,然后尝试在同一问题的先前答案中建议的其他内容。