जांचें कि क्या कोई पथ किसी फ़ाइल या फ़ोल्डर का प्रतिनिधित्व करता है


141

मुझे यह जाँचने के लिए एक वैध विधि की आवश्यकता है कि क्या Stringफ़ाइल या निर्देशिका के लिए एक पथ का प्रतिनिधित्व करता है। Android में वैध निर्देशिका नाम क्या हैं? जैसा कि यह सामने आया है, फ़ोल्डर नामों में '.'वर्ण शामिल हो सकते हैं , इसलिए सिस्टम कैसे समझता है कि कोई फ़ाइल या फ़ोल्डर है या नहीं?


2
"सिस्टम कैसे समझता है कि कोई फ़ाइल या फ़ोल्डर है": सिस्टम कैसे नहीं समझ सकता है? यह फ़ाइल सिस्टम में डिस्क पर है और यह एक या दूसरे है।
लोर्ने

जवाबों:


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

जावदोक को देखेंFile


या आप 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

जैसा कि मैंने अपने प्रश्न में उल्लेख किया है, मेरे पास केवल स्ट्रिंग्स और कोई फ़ाइल इंस्टेंसेस नहीं हैं, और मैं उन्हें नहीं बना सकता।
ईगोर

1
pathमेरे उदाहरण में है String। आप एक Fileउदाहरण क्यों नहीं बना सकते ? ध्यान दें कि यह फ़ाइल सिस्टम पर कुछ भी नहीं बदलेगा।
बाज

यहां एक ठोस उदाहरण दिया गया है, मैं निम्नलिखित पथ का उपयोग करके एक फ़ाइल बनाने की कोशिश कर रहा हूं: / mnt / sdcard / arc / root, और isDirectory () के लिए यह गलत है। यहाँ क्या समस्या है?
Egor

@ ईगोर काफी कठिन है, क्योंकि मेरे पास एक Android डिवाइस नहीं है। ध्यान दें कि rootएक फ़ाइल हो सकती है। जरूरी नहीं कि फाइलें .somethingएक्सटेंशन की हों।
बाज ऑक्ट

10
isDirectory () मेथड तभी सही होगा जब फाइल मौजूद है और यह एक डायरेक्टरी है। यदि पथ में दी गई फ़ाइल मौजूद नहीं है, तो यह भी गलत है। तो यह अप्रत्यक्ष () गलत है अगर दिए गए रास्ते मौजूद नहीं है या यह मौजूद है, लेकिन यह एक निर्देशिका नहीं है ... आशा है कि मदद करता है ..
प्रफुल्ल भटनागर

50

Nio एपीआई के साथ रहते हुए स्वच्छ समाधान:

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
जावा कोड के लिए सवाल पूछने पर स्काला में जवाब क्यों दें (टैग देखें)?
बाज़

6
@ बाज क्योंकि स्काला जावा के लिए सहृदय है ... केवल मजाक कर रहा है :- डी। मैंने जवाब अपडेट कर दिया है।
शेंग

आप अस्थायी निर्देशिका बना सकते हैं, वहां निर्देशिका और फाइलें बना सकते हैं। फिर ऊपर कोड का उपयोग करें और मुखर करें। एक हाथ में नियमित फ़ाइलों / निर्देशिकाओं का उपयोग करें अन्यथा आइटम के कुछ डमी पथ का उपयोग करें जो नहीं बनाया गया है।
गोंडरी


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

यह जांचने के लिए कि क्या स्ट्रिंग प्रोग्राम या पथ का प्रतिनिधित्व करती है, आपको एपीआई तरीकों का उपयोग करना चाहिए isFile(), isDirectory().

सिस्टम कैसे समझता है कि कोई फ़ाइल या फ़ोल्डर है या नहीं?

मुझे लगता है, फ़ाइल और फ़ोल्डर प्रविष्टियों को एक डेटा संरचना में रखा जाता है और इसे फ़ाइल सिस्टम द्वारा प्रबंधित किया जाता है।



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

सीधे सवाल का जवाब देने के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.