किसी विशिष्ट फ़ाइल का सिर्फ मूल निर्देशिका नाम कैसे प्राप्त करें


111

dddपथ नाम से कैसे प्राप्त करें जहाँ test.java रहता है।

File file = new File("C:/aaa/bbb/ccc/ddd/test.java");

1
क्या यह एक सामान्य फ़ाइल के लिए है, या आप अपने स्रोत फ़ाइल की मूल निर्देशिका प्राप्त करने का प्रयास कर रहे हैं? यदि बाद में, मुझे यकीन है कि आप जावा संकलन को नहीं समझ रहे हैं। रनटाइम पर, test.javaसंभवतः उस कंप्यूटर पर भी मौजूद नहीं होगा जहां प्रोग्राम चलाया जा रहा है। यह संकलित .classफ़ाइल है जिसे चलाया जाता है। तो यह केवल तभी काम करेगा जब आप जानते हैं कि कहां dddस्थित है, जिस स्थिति में इसे प्रोग्रामेटिक रूप से खोजने का कोई मतलब नहीं है; बस कठिन कोड यह।
मार्क पीटर्स

जवाबों:


141

उपयोग Fileकी getParentFile()विधि और String.lastIndexOf()पुनः प्राप्त करने के सिर्फ तत्काल मूल निर्देशिका।

मार्क की टिप्पणी से बेहतर समाधान है lastIndexOf():

file.getParentFile().getName();

ये समाधान केवल तभी काम करते हैं जब फ़ाइल में पैरेंट फ़ाइल होती है (उदाहरण के लिए, पैरेंट लेने वाले फ़ाइल निर्माणकर्ताओं में से एक के माध्यम से बनाई गई File)। जब getParentFile()शून्य का उपयोग करने के लिए आपको सहारा लेना होगा lastIndexOf, या अपाचे कॉमन्सFileNameUtils.getFullPath() जैसे कुछ का उपयोग करना होगा : '

FilenameUtils.getFullPathNoEndSeparator(file.getAbsolutePath());
=> C:/aaa/bbb/ccc/ddd

उपसर्ग और अनुगामी विभाजक को बनाए रखने / छोड़ने के लिए कई प्रकार हैं। आप या तो FilenameUtilsपरिणाम, उपयोग lastIndexOf, आदि से नाम हथियाने के लिए उसी वर्ग का उपयोग कर सकते हैं ।


14
आप की जरूरत नहीं है lastIndexOf, बस का उपयोग करें file.getParentFile().getName()
मार्क पीटर्स

13
शायद ज़रुरत पड़े। यदि यह लौटता है null(यदि आपने Fileसापेक्ष पथ के साथ उदाहरण बनाया है) - कोशिश करें file.getAbsoluteFile().getParentFile().getName()
निदु

1
@MarkPeters केवल तभी काम करता है जब फ़ाइल को मूल फ़ाइल के साथ बनाया गया था, हालाँकि, जिसका मैं अनुमान लगा रहा हूँ अपेक्षाकृत कम है।
डेव न्यूटन

20
File f = new File("C:/aaa/bbb/ccc/ddd/test.java");
System.out.println(f.getParentFile().getName())

f.getParentFile() अशक्त हो सकता है, इसलिए आपको इसकी जांच करनी चाहिए।


1
बस यह सुनिश्चित करने के लिए, आउटपुट इस प्रकार है: C: / aaa / bbb / ccc / ddd
लड़के अवराम

16

नीचे का उपयोग करें,

File file = new File("file/path");
String parentPath = file.getAbsoluteFile().getParent();

इस बात की ओर इशारा करते हुए कि इस पद्धति का मूल सेट होना चाहिए, भले ही अंतर्निहित फ़ाइल नहीं थी।
पेस

13

जावा 7 में आपके पास नए पथ एप हैं । आधुनिक और सबसे साफ समाधान है:

Paths.get("C:/aaa/bbb/ccc/ddd/test.java").getParent().getFileName();

परिणाम होगा:

C:/aaa/bbb/ccc/ddd

5

यदि आपके पास बस स्ट्रिंग पथ है और नई फ़ाइल ऑब्जेक्ट नहीं बनाना चाहते हैं तो आप कुछ का उपयोग कर सकते हैं:

public static String getParentDirPath(String fileOrDirPath) {
    boolean endsWithSlash = fileOrDirPath.endsWith(File.separator);
    return fileOrDirPath.substring(0, fileOrDirPath.lastIndexOf(File.separatorChar, 
            endsWithSlash ? fileOrDirPath.length() - 2 : fileOrDirPath.length() - 1));
}

4
यह ArrayOutOfBoundsException फेंकता है अगर आप पहले से ही रूट लोकेशन पर हैं - "/" -
Jnmgr

2
File file = new File("C:/aaa/bbb/ccc/ddd/test.java");
File curentPath = new File(file.getParent());
//get current path "C:/aaa/bbb/ccc/ddd/"
String currentFolder= currentPath.getName().toString();
//get name of file to string "ddd"

यदि आपको किसी अन्य पथ उपयोग द्वारा फ़ोल्डर "डीडीडी" को जोड़ने की आवश्यकता है;

String currentFolder= "/" + currentPath.getName().toString();

1

जावा 7 से मैं पाथ का उपयोग करना पसंद करूंगा। आपको केवल पथ डालने की आवश्यकता है:

Path dddDirectoryPath = Paths.get("C:/aaa/bbb/ccc/ddd/test.java");

और कुछ विधि प्राप्त करें:

public String getLastDirectoryName(Path directoryPath) {
   int nameCount = directoryPath.getNameCount();
   return directoryPath.getName(nameCount - 1);
}

0

ग्रूवी में:

Fileखांचे में स्ट्रिंग को पार्स करने के लिए एक उदाहरण बनाने की आवश्यकता नहीं है । इसे निम्नानुसार किया जा सकता है:

String path = "C:/aaa/bbb/ccc/ddd/test.java"
path.split('/')[-2]  // this will return ddd

विभाजन बना देगा सरणी [C:, aaa, bbb, ccc, ddd, test.java]और सूचकांक -2पिछले एक से पहले प्रवेश करने के लिए इंगित करेगा, जो इस मामले में हैddd


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