उपयोग करते समय
file.createNewFile();
मुझे निम्नलिखित अपवाद मिलते हैं
java.io.IOException: Parent directory of file does not exist: /.../pkg/databases/mydb
मुझे आश्चर्य है कि वहाँ एक createNewFile है जो लापता मूल निर्देशिका बनाता है?
जवाबों:
क्या आपने यह कोशिश की है?
file.getParentFile().mkdirs();
file.createNewFile();
मैं एक एकल विधि कॉल के बारे में नहीं जानता जो यह करेगी, लेकिन यह दो कथनों के रूप में बहुत आसान है।
mkdirsअगर आपको जिस फ़ाइल को बनाने की कोशिश की जा रही है, वह गैर-मौजूद निर्देशिका में नहीं है, लेकिन मेरा उपयोग मामला यह है कि मैं कई फाइलें बना रहा हूँ, जिनमें से कुछ की मूल निर्देशिकाएँ हैं, जबकि अन्य की नहीं।
जॉन का जवाब काम करता है यदि आप निश्चित हैं कि जिस पथ स्ट्रिंग के साथ आप एक फ़ाइल बना रहे हैं, उसमें मूल निर्देशिकाएं शामिल हैं, अर्थात यदि आप निश्चित हैं कि मार्ग प्रपत्र का है <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();
new File("file.txt").getParentFile()रिटर्नnull,new File("dir/file.txt").getParentFile()उसी के रूप में रिटर्न करता हैnew File("dir")