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; 否则是假的。
在此基础上,您的文件不存在或不是普通文件。
第一个可能的原因:
- 文件不存在;
- 文件无法访问;
- 文件名错误;
- 程序中使用的字符编码与创建文件时使用的字符编码不同。
第二个可能的原因:
- 它不是常规文件 。
或者它是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);
现在测试返回正确的值。 我不知道你是否已经想到这一点,因为你问过这已经五年了。 但对于有相同问题的任何人,请确保您将正确的路径传递给您的文件,然后尝试在同一问题的先前答案中建议的其他内容。