2012-10-08 167 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

相關問題