14

我有一个名为“aaaaaaa.xls”的文件

为此,File.isFile()并且File.isDirectory()正在返回false?为什么它回来falseLinux

4

7 回答 7

7

请尝试以下代码示例

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

boolean isDir = pFile.isDirectory();

boolean isFile = pfile.isFile();

该文件不是文件

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

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

于 2013-02-13T12:25:00.387 回答
6

根据文档

公共布尔 isFile()

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

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

第一种可能的原因:

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

第2种可能的原因:

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

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


(答案部分基于此线程

于 2014-01-19T23:25:04.163 回答
3

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

  • 目录的执行位允许受影响的用户进入它并访问其中的文件和目录
于 2013-02-14T09:46:05.967 回答
2

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

File files = Paths.get(path).toFile();      
List<String> 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)));                       
        }                   
    }
}

它返回 false forFiles.isDirectory()和 for Files.exists()

修修补补了一下,我注意到我只获取文件名,没有完整路径,这意味着我只是传递testing_testingPaths.get()而不是传递完整路径来获取它,这就是它不存在的原因并在两种情况下都返回 false。

我将代码更改为:

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

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

于 2018-05-30T15:02:31.807 回答
0

您的情况下Java使用的字符编码与源文件中的字符编码不同,因此文件名中的符号“ä”无法被Java正确解码,导致文件名不同。这就是Java找不到该文件的原因。因此,对该文件的文件操作函数返回“False”。

作为在不同构建环境中正常工作的最安全方法,为避免设置 Java 字符编码选项并更轻松地处理源文件,请在源代码中仅使用 US-ASCII(7 位)字符。至于其他字符,请使用它们的 Unicode 数字,例如,使用“\u00e4”代替“ä”。因此,您的文件名将变为“aaa\u00e4aa.xls”。

于 2022-02-03T02:41:09.083 回答
0

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

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

于 2016-11-27T16:19:12.790 回答
0

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

我真的很生自己的气

于 2018-04-12T13:37:33.297 回答