कैसे लापता माता पिता निर्देशिका के साथ एक नई फ़ाइल बनाने के लिए?


99

उपयोग करते समय

file.createNewFile();

मुझे निम्नलिखित अपवाद मिलते हैं

java.io.IOException: Parent directory of file does not exist: /.../pkg/databases/mydb

मुझे आश्चर्य है कि वहाँ एक createNewFile है जो लापता मूल निर्देशिका बनाता है?

जवाबों:


150

क्या आपने यह कोशिश की है?

file.getParentFile().mkdirs();
file.createNewFile();

मैं एक एकल विधि कॉल के बारे में नहीं जानता जो यह करेगी, लेकिन यह दो कथनों के रूप में बहुत आसान है।


यह केवल तभी काम करता है जब फ़ाइल एक पथ स्ट्रिंग के साथ बनाई गई थी जिसमें एक पैरेंट डायरेक्टरी होती है, यानी new File("file.txt").getParentFile()रिटर्न null, new File("dir/file.txt").getParentFile()उसी के रूप में रिटर्न करता हैnew File("dir")
Zoltán

1
यह सच है, mkdirsअगर आपको जिस फ़ाइल को बनाने की कोशिश की जा रही है, वह गैर-मौजूद निर्देशिका में नहीं है, लेकिन मेरा उपयोग मामला यह है कि मैं कई फाइलें बना रहा हूँ, जिनमें से कुछ की मूल निर्देशिकाएँ हैं, जबकि अन्य की नहीं।
ज़ोल्टन

14

जॉन का जवाब काम करता है यदि आप निश्चित हैं कि जिस पथ स्ट्रिंग के साथ आप एक फ़ाइल बना रहे हैं, उसमें मूल निर्देशिकाएं शामिल हैं, अर्थात यदि आप निश्चित हैं कि मार्ग प्रपत्र का है <parent-dir>/<file-name>

यदि ऐसा नहीं होता है, अर्थात यह फॉर्म का एक रिश्तेदार मार्ग है <file-name>, तो getParentFile()वापस आ जाएगा null

उदाहरण के लिए

File f = new File("dir/text.txt");
f.getParentFile().mkdirs();     // works fine because the path includes a parent directory.

File f = new File("text.txt");
f.getParentFile().mkdirs();     // throws NullPointerException because the parent file is unknown, i.e. `null`.

इसलिए यदि आपकी फ़ाइल पथ में मूल निर्देशिका शामिल हो सकती है या नहीं हो सकती है, तो आप निम्नलिखित कोड के साथ सुरक्षित हैं:

File f = new File(filename);
if (f.getParentFile() != null) {
  f.getParentFile().mkdirs();
}
f.createNewFile();

बहुत सारे कारणों से आपको हमेशा एक रास्ता शामिल करना चाहिए। सिस्टम को कैसे पता होना चाहिए कि आप उस फ़ाइल को कहाँ रखना चाहते हैं?
NikkyD

@NikkyD मुझे क्षमा करें, मैं आपकी टिप्पणी को नहीं समझ पा रहा हूं। मेरे उत्तर में, मैं यह नहीं कह रहा हूँ कि आप एक पथ शामिल नहीं कर रहे हैं, लेकिन यह है कि पारित मार्ग में मूल निर्देशिका शामिल नहीं हो सकती है । उत्तर में इस तरह के पथ के लिए एक उदाहरण भी है।
ज़ोल्टन

9

Java7 के अनुसार, आप NIO2 API का उपयोग कर सकते हैं:

void createFile() throws IOException {
    Path fp = Paths.get("dir1/dir2/newfile.txt");
    Files.createDirectories(fp.getParent());
    Files.createFile(fp);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.