ตรวจสอบว่าเส้นทางแสดงถึงไฟล์หรือโฟลเดอร์


141

ฉันต้องการวิธีการที่ถูกต้องในการตรวจสอบว่าStringมีพา ธ สำหรับไฟล์หรือไดเรกทอรีหรือไม่ ชื่อไดเรกทอรีที่ถูกต้องใน Android คืออะไร? ชื่อโฟลเดอร์สามารถมี'.'ตัวอักษรได้ดังนั้นระบบจะเข้าใจได้อย่างไรว่ามีไฟล์หรือโฟลเดอร์อย่างไร


2
"ระบบเข้าใจได้อย่างไรว่ามีไฟล์หรือโฟลเดอร์": ระบบจะไม่เข้าใจได้อย่างไร มันมีอยู่ในดิสก์ในระบบไฟล์และมันเป็นอย่างใดอย่างหนึ่ง
มาร์ควิสแห่ง Lorne

คำตอบ:


203

สมมติว่าเป็นของคุณpathString

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

1
pathStringในตัวอย่างของฉันคือ ทำไมคุณไม่สร้างFileอินสแตนซ์? โปรดทราบว่าสิ่งนี้จะไม่เปลี่ยนแปลงอะไรในระบบไฟล์
Baz

นี่คือตัวอย่างที่เป็นรูปธรรมฉันกำลังพยายามสร้างไฟล์โดยใช้พา ธ ต่อไปนี้: / mnt / sdcard / arc / root และสำหรับ isDirectory () มันจะคืนค่าเท็จ มีปัญหาอะไรที่นี่
Egor

@Egor ค่อนข้างยากที่จะบอกเนื่องจากฉันไม่มีอุปกรณ์ Android โปรดทราบว่าrootอาจเป็นไฟล์ ไฟล์ไม่จำเป็นต้องมี.somethingนามสกุล
Baz

10
isDirectory () วิธีการจะกลับจริงถ้าไฟล์ที่มีอยู่และมันเป็นไดเรกทอรี หากไฟล์ที่ระบุในพา ธ ไม่มีอยู่ก็จะส่งคืนค่าเท็จ ดังนั้นมัน isDirectory () จะคืนค่าเท็จหากเส้นทางที่ให้ไว้ไม่มีอยู่จริงหรือมันมีอยู่ แต่มันไม่ใช่ไดเรกทอรี ... หวังว่าจะช่วย ..
Praful Bhatnagar

50

ทำความสะอาดโซลูชันในขณะที่อยู่กับ nio API:

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

นี่คือคำตอบที่ดีกว่าถ้าคุณวนซ้ำรายการไดเรกทอรี ที่นี่คุณกำลังใช้คลาสแบบคงที่เพื่อเรียกใช้การตรวจสอบเหล่านี้แทนที่จะสร้างFileวัตถุใหม่ทุกครั้ง บันทึกหน่วยความจำ
Kervvv

2
ไม่ตอบคำถามที่ถาม Files.isDirectory ()ไม่ยอมรับสตริง
gerardw

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
ทำไมต้องให้คำตอบใน Scala เมื่อคำถามถามรหัส Java (ดูแท็ก)
Baz

6
@Baz เนื่องจาก Scala แปรปรวนเป็น Java ... เพียงล้อเล่น :-D ฉันได้อัพเดตคำตอบแล้ว
Sheng

คุณสามารถสร้างไดเรกทอรีชั่วคราวสร้างไดเรกทอรีและไฟล์ จากนั้นใช้รหัสด้านบนและยืนยัน ในมือข้างหนึ่งให้ใช้ไฟล์ / ไดเรกทอรีปกติมิฉะนั้นจะใช้เส้นทางจำลองของไอเท็มที่ไม่ได้สร้างขึ้นมา
Gondri


3

ไม่มีวิธีใดที่ระบบจะบอกคุณว่ามีStringตัวแทนfileหรือdirectoryถ้าไม่มีอยู่ในระบบไฟล์ ตัวอย่างเช่น:

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

ดังนั้นเราจะเห็นว่าในทั้งสองกรณีระบบคืนเท็จ นี่เป็นเรื่องจริงสำหรับทั้งสองjava.io.Fileและjava.nio.file.Path


2

ในการตรวจสอบว่าสตริงแสดงถึงพา ธ หรือไฟล์โดยทางโปรแกรมคุณควรใช้วิธีการ API เช่น isFile(), isDirectory().

ระบบเข้าใจได้อย่างไรว่ามีไฟล์หรือโฟลเดอร์?

ฉันเดาว่ารายการไฟล์และโฟลเดอร์จะถูกเก็บไว้ในโครงสร้างข้อมูลและจัดการโดยระบบไฟล์



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

เพื่อตอบคำถามโดยตรง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.