检查路径代表文件还是文件夹


141

我需要一种有效的方法来检查a是否String代表文件或目录的路径。Android中有效的目录名称是什么?出现时,文件夹名称可以包含'.'字符,因此系统如何理解是否存在文件或文件夹?


2
“系统如何了解是否存在文件或文件夹”:系统如何无法理解?它在文件系统的磁盘上,也可以是另一个。
洛恩侯爵,

Answers:


203

假设path是你的String

File file = new File(path);

boolean exists =      file.exists();      // Check if the file exists
boolean isDirectory = file.isDirectory(); // Check if it's a directory
boolean isFile =      file.isFile();      // Check if it's a regular file

参见FileJavadoc


或者,您可以使用NIO类Files并检查如下内容:

Path file = new File(path).toPath();

boolean exists =      Files.exists(file);        // Check if the file exists
boolean isDirectory = Files.isDirectory(file);   // Check if it's a directory
boolean isFile =      Files.isRegularFile(file); // Check if it's a regular file

正如我在问题中提到的那样,我只有字符串,没有文件实例,也无法创建它们。
Egor,2012年

1
path在我的例子中是String。为什么不能创建File实例?请注意,这不会更改文件系统上的任何内容。
巴兹(Baz)2012年

这是一个具体示例,我试图使用以下路径创建文件:/ mnt / sdcard / arc / root,对于isDirectory(),它返回false。这里有什么问题?
Egor,2012年

@Egor很难说,因为我没有Android设备。注意这root可能是一个文件。文件不一定具有.something扩展名。
巴兹(Baz)2012年

10
仅当文件存在并且它是目录时,isDirectory()方法才会返回true。如果路径中给定的文件不存在,则它还会返回false。因此,它的isdirectory()将返回false,如果给出的路径不存在或存在,但它不是一个目录...希望帮助..
Praful纳加尔

50

保持nio API的同时,清洁解决方案:

Files.isDirectory(path)
Files.isRegularFile(path)

如果要遍历目录列表,这是更好的答案。在这里,您使用静态类来运行这些检查,而不是File每次都创建一个新对象。节省内存
Kervvv

2
不回答所问的问题。Files.isDirectory()不接受字符串。
gerardw '19

21

请坚持使用nio API进行这些检查

import java.nio.file.*;

static Boolean isDir(Path path) {
  if (path == null || !Files.exists(path)) return false;
  else return Files.isDirectory(path);
}

2
当问题要求Java代码时,为什么要在Scala中给出答案(请参见标签)?
巴兹2015年

6
@Baz因为Scala与Java是协变的,所以只是在开玩笑:-D。我已经更新了答案。
日盛

您可以创建临时目录,在其中创建目录和文件。然后使用上面的代码并声明。一方面使用常规文件/目录,否则使用一些未创建的项目的虚拟路径。
Gondri '18

4
String path = "Your_Path";
File f = new File(path);

if (f.isDirectory()){



  }else if(f.isFile()){



  }

3

如果文件系统中不存在String a filedirectory,系统将无法告诉您。例如:

Path path = Paths.get("/some/path/to/dir");
System.out.println(Files.isDirectory(path)); // return false
System.out.println(Files.isRegularFile(path)); // return false

对于以下示例:

Path path = Paths.get("/some/path/to/dir/file.txt");
System.out.println(Files.isDirectory(path));  //return false
System.out.println(Files.isRegularFile(path));  // return false

因此,我们看到两种情况下系统都返回false。这是真实的两个java.io.Filejava.nio.file.Path


2

要以编程方式检查字符串是表示路径还是文件,您应使用API​​方法,例如 isFile(), isDirectory().

系统如何了解是否有文件或文件夹?

我猜,文件和文件夹条目保存在数据结构中,并且由文件系统管理。



0
public static boolean isDirectory(String path) {
    return path !=null && new File(path).isDirectory();
}

直接回答问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.