नई फ़ाइल पर लिखते समय स्वचालित रूप से संपूर्ण पथ बनाएं


246

मैं एक नई फाइल लिखना चाहता हूं FileWriter। मैं इसे इस तरह से उपयोग करता हूं:

FileWriter newJsp = new FileWriter("C:\\user\Desktop\dir1\dir2\filename.txt");

अभी dir1और dir2वर्तमान में मौजूद नहीं है। मैं चाहता हूं कि अगर वे पहले से ही वहां नहीं हैं तो जावा उन्हें अपने आप बना देगा। वास्तव में जावा को पहले से मौजूद नहीं होने पर संपूर्ण फ़ाइल पथ सेट करना चाहिए।

इसे कैसे प्राप्त किया जा सकता है?

जवाबों:


431

कुछ इस तरह:

File file = new File("C:\\user\\Desktop\\dir1\\dir2\\filename.txt");
file.getParentFile().mkdirs();
FileWriter writer = new FileWriter(file);

11
क्यों GetParentFile और न सिर्फ mkdirs?
15

क्या मैं पिछले फ़ोल्डर को ओवरराइड करूंगा, अगर मैं एक ही कोड को अलग-अलग सिबलिंग फ़ाइल के साथ फिर से जारी कर रहा हूं?
surajs1n

1
@ surajs1n: यदि निर्देशिका पहले से मौजूद है, mkdirsतो कुछ नहीं करेगी।
जॉन स्कीट

3
@sauperl: यदि फ़ाइल अभी तक मौजूद नहीं है, तो mkdirs () मान लेंगे कि निर्दिष्ट सब कुछ एक निर्देशिका है और इसे इस तरह बनाता है (बस इसे परीक्षण किया गया)। GetParentFile () का उपयोग करके , आप फ़ाइल के निर्माण को FileWriter में ही छोड़ देते हैं ।
h4nek

149

Java 1.7 के बाद से आप Files.createFile का उपयोग कर सकते हैं:

Path pathToFile = Paths.get("/home/joe/foo/bar/myFile.txt");
Files.createDirectories(pathToFile.getParent());
Files.createFile(pathToFile);

4
यह ध्यान रखना महत्वपूर्ण है कि सापेक्ष पथ अशक्त सूचक अपवाद का कारण हो सकता है। Path pathToFile = Paths.get("myFile.txt"); Files.createDirectories(pathToFile.getParent());
पत्रिका

if (files.exists (pathToFile.getParent ())) Files.createDirectory (pathToFile.getParent ()); // टेस्ट अगर दिर पहले से ही त्रुटि से बचने के लिए मौजूद है
आंद्रे नेल

29

उपयोग करें File.mkdirs():

File dir = new File("C:\\user\\Desktop\\dir1\\dir2");
dir.mkdirs();
File file = new File(dir, "filename.txt");
FileWriter newJsp = new FileWriter(file);


4

इन सभी सिरदर्द को संभालने के लिए FileUtils का उपयोग करें ।

संपादित करें: उदाहरण के लिए, फ़ाइल में लिखने के लिए नीचे दिए गए कोड का उपयोग करें, यह पद्धति 'मौजूद नहीं होने पर मूल निर्देशिका की जाँच और निर्माण' करेगी।

openOutputStream(File file [, boolean append]) 

1
कृपया, क्या आप अधिक विशिष्ट हो सकते हैं?
जीन

हाय जीन, संपादित। FileUtils के अंतर्गत अन्य उपयोगी विधियों का एक पूरा समूह है। Apache Commons IO वर्ग जैसे OIUtils और FileUtils जावा डेवलपर्स के जीवन को आसान बनाते हैं।
काकसी

1
मैं मानता हूं कि FileUtils जाने का एक अच्छा तरीका है, लेकिन मुझे लगता है कि इसके लिए एक आसान तरीका लिखना है, जैसे कि OpenStringToFile का उपयोग करना, न कि OpenOutputStream का। जैसे फ़ाइल फ़ाइल = नई फ़ाइल ("C: /user/Desktop/dir1/dir2/filename.txt"); FileUtils.writeStringToFile (फ़ाइल, "फू बार बाज", सच);
पौल

उसके लिए धन्यवाद । मेरे कोड को अब बहुत साफ कर दिया। हाल के जेवाडोक से लिंक: commons.apache.org/proper/commons-io/javadocs/api-2.5/org/……
निखिल साहू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.