2012-10-08 122 views
82

我需要一个有效的方法来检查String是否代表文件或目录的路径。 Android中有效的目录名称是什么?当它出来时,文件夹名称可以包含'.'字符,那么系统如何理解是否有文件或文件夹?提前致谢。检查路径是否代表文件或文件夹

+1

“系统如何理解是否有文件或文件夹”:系统*如何不能理解?它在文件系统中的磁盘上,它是一个或另一个。 – EJP

回答

111

假设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 

File Javadoc


或者您可以使用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 
+0

正如我在我的问题中提到的,我只有字符串和没有文件实例,我不能创建它们。 – Egor

+1

我的例子中'path'是'String'。为什么你不能创建一个'File'实例?请注意,这不会改变文件系统上的任何内容。 – Baz

+0

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

2

要检查字符串代表一个路径或文件编程,您应该使用API​​方法,如isFile(), isDirectory().

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

我想,文件和文件夹条目保存在一个数据结构中,它由文件系统管理。

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

if (f.isDirectory()){ 



    }else if(f.isFile()){ 



    } 
18

请坚持NIO API来执行这些检查

import java.nio.file.*; 

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

为什么在Scala中给出答案,当问题是要求Java代码时标签)? – Baz

+5

@Baz因为Scala与Java是协变的......只是在开玩笑:-D。我已经更新了答案 – Sheng

+0

这很好,但你怎么能单元测试呢? –

26

清洁解决方案,同时与NIO API住:

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

有没有办法让系统告诉你如果String代表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

相关问题