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

时间:2013-02-13 12:17:50

标签: java file

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

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

6 个答案:

答案 0 :(得分:6)

请尝试以下代码示例

if(!pFile.exists()){
   throw new FileNotFoundException();
}

boolean isDir = pFile.isDirectory();

boolean isFile = pfile.isFile();

该文件不是文件

  

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

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

答案 1 :(得分:6)

根据documentation

  

public boolean isFile()

     

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

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

第一个可能的原因:

  1. 文件不存在;
  2. 文件无法访问;
  3. 文件名错误输入;
  4. 程序中使用的字符编码不是 与创建文件时使用的内容相同。
  5. 第二个可能的原因:

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

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


    (答案部分基于this thread

答案 2 :(得分:3)

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

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

答案 3 :(得分:1)

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

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

问题是, path 包含一个名为 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。

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

我将代码更改为:

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

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

答案 4 :(得分:0)

我在file.isFile()文件上返回false时也遇到了问题,大概是因为该文件不是“常规”,正如此问题的其他回复中所述。作为一种解决方法,我使用file.listFiles() != null,它似乎提供了我需要的功能。根据{{​​3}}:

  

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

答案 5 :(得分:0)

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

我自己很生气