जावा FileOutputStream यदि मौजूद नहीं है तो फ़ाइल बनाएँ


187

वहाँ एक तरह से FileOutputStream का उपयोग करने का एक तरीका है कि यदि कोई फ़ाइल (स्ट्रिंग फ़ाइल नाम) मौजूद नहीं है, तो वह इसे बनाएगा?

FileOutputStream oFile = new FileOutputStream("score.txt", false);

जवाबों:


302

FileNotFoundExceptionयदि फ़ाइल मौजूद नहीं है और इसे बनाया नहीं जा सकता है ( doc ), तो यह फेंक देगा , लेकिन यदि यह हो सकता है तो इसे बनाएगा। यह सुनिश्चित करने के लिए कि आपको संभवतः पहले परीक्षण करना चाहिए कि फ़ाइल बनाने से पहले मौजूद है FileOutputStream(और createNewFile()यदि ऐसा नहीं है तो बनाएं ):

File yourFile = new File("score.txt");
yourFile.createNewFile(); // if file already exists will do nothing 
FileOutputStream oFile = new FileOutputStream(yourFile, false); 

2
यदि फ़ाइल मौजूद नहीं है, तो मैं एक खाली .txt फ़ाइल कैसे बनाऊंगा?
स्टीफन डन

3
createNewFile()विधि के साथ @StefanDunn , जैसा कि मेरे उदाहरण में दिखाया गया है।
ताजनगरी

55
हालत बेमानी है। JavaDoc के अनुसार , createNewFile()स्वयं ही फ़ाइल के अस्तित्व की परमाणु जाँच करता है।
अज़टेक

8
@aztek शायद हम कोड पठनीयता में सुधार करने के लिए शर्त छोड़ सकते हैं
एंड्री

2
createNewFile()यहाँ समय की कुल बर्बादी है। सिस्टम पहले से ही ऐसा करेगा। आप इसे केवल दो बार देखने के लिए मजबूर कर रहे हैं।
लोरेन का


23

आप एक खाली फ़ाइल बना सकते हैं चाहे वह मौजूद हो या नहीं ...

new FileOutputStream("score.txt", false).close();

यदि आप फ़ाइल को छोड़ना चाहते हैं यदि वह मौजूद है ...

new FileOutputStream("score.txt", true).close();

यदि आप किसी निर्देशिका में फ़ाइल बनाने का प्रयास करते हैं तो आपको केवल एक FileNotFoundException मिलेगी, जो मौजूद नहीं है।


3
यह FileNotFoundExceptionदोनों मामलों में फेंकता है।
मिश्रण

21
File f = new File("Test.txt");
if(!f.exists()){
  f.createNewFile();
}else{
  System.out.println("File already exists");
}

इसे fअपने FileOutputStreamकंस्ट्रक्टर को पास करें ।


2
यहाँ एक दौड़ की स्थिति है ... इसे इस प्रकार करना बेहतर है: फ़ाइल f = नई फ़ाइल ("Test.txt"); अगर (f.createNewFile ()) {System.out.println ("फ़ाइल पहले से मौजूद है"); }
मानवता

19

Apache कॉमन्स से FileUtils एक सिंगल लाइन में इसे प्राप्त करने का एक बहुत अच्छा तरीका है।

FileOutputStream s = FileUtils.openOutputStream(new File("/home/nikhil/somedir/file.txt"))

यह मौजूद नहीं होने पर पैरेंट फोल्डर बनाएगा और अगर फाइल मौजूद नहीं है तो एक अपवाद बनाएं और अगर फाइल ऑब्जेक्ट डायरेक्टरी है या नहीं तो उसे लिखा नहीं जा सकता है। यह इसके बराबर है :

File file = new File("/home/nikhil/somedir/file.txt");
file.getParentFile().mkdirs(); // Will create parent directories if not exists
file.createNewFile();
FileOutputStream s = new FileOutputStream(file,false);

यदि वर्तमान उपयोगकर्ता को ऑपरेशन करने की अनुमति नहीं है, तो उपरोक्त सभी ऑपरेशन एक अपवाद फेंक देंगे।


4

मौजूद नहीं है तो फ़ाइल बनाएँ। यदि फ़ाइल बाहर निकलती है, तो उसकी सामग्री को साफ़ करें:

/**
 * Create file if not exist.
 *
 * @param path For example: "D:\foo.xml"
 */
public static void createFile(String path) {
    try {
        File file = new File(path);
        if (!file.exists()) {
            file.createNewFile();
        } else {
            FileOutputStream writer = new FileOutputStream(path);
            writer.write(("").getBytes());
            writer.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

2

पथ और फ़ाइलों का उपयोग करने से मौजूद नहीं होने पर केवल फ़ाइल बनाने के लिए एक वैकल्पिक तरीका देना।

Path path = Paths.get("Some/path/filename.txt");
Files.createDirectories(path.getParent());
if( !Files.exists(path))
    Files.createFile(path);
Files.write(path, ("").getBytes());

0

FileNotFoundExceptionयदि फ़ाइल मौजूद नहीं है, तो आप संभावित रूप से प्राप्त कर सकते हैं।

जावा प्रलेखन कहता है:

कोई फ़ाइल उपलब्ध है या नहीं या बनाई जा सकती है यह अंतर्निहित प्लेटफॉर्म http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html पर निर्भर करता है

यदि आप जावा 7 का उपयोग कर रहे हैं तो आप java.nio पैकेज का उपयोग कर सकते हैं:

विकल्प पैरामीटर निर्दिष्ट करता है कि फ़ाइल कैसे बनाई जाती है या खोली जाती है ... यह लिखने के लिए फ़ाइल को खोलता है, अगर यह मौजूद नहीं है तो फ़ाइल का निर्माण करना ...

http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html


0

new FileOutputStream(f) ज्यादातर मामलों में एक फ़ाइल बनाएगा, लेकिन दुर्भाग्य से आपको FileNotFoundException मिल जाएगी

यदि फ़ाइल मौजूद है, लेकिन एक नियमित फ़ाइल के बजाय एक निर्देशिका है, मौजूद नहीं है, लेकिन बनाई नहीं जा सकती है, या किसी अन्य कारण से नहीं खोली जा सकती है

जावदोक से

मेरे पास अन्य शब्द बहुत सारे मामले हो सकते हैं जहां आपको FileNotFoundException अर्थ मिलेगा "आपकी फ़ाइल नहीं बना सकता", लेकिन आप इसका कारण नहीं खोज पाएंगे कि फ़ाइल निर्माण विफल क्यों हुआ।

एक समाधान फ़ाइल एपीआई के लिए किसी भी कॉल को हटाने और इसके बजाय फ़ाइलों एपीआई का उपयोग करने के लिए है क्योंकि यह बहुत बेहतर त्रुटि से निपटने प्रदान करता है। आमतौर पर किसी के new FileOutputStream(f)साथ बदलें Files.newOutputStream(p)

ऐसे मामलों में जहां आपको फ़ाइल एपीआई का उपयोग करने की आवश्यकता होती है (क्योंकि आप उदाहरण के लिए फ़ाइल का उपयोग करके एक बाहरी इंटरफ़ेस का उपयोग करते हैं), Files.createFile(p)यह सुनिश्चित करने का एक अच्छा तरीका है कि आपकी फ़ाइल ठीक से बनाई गई है और यदि आपको नहीं पता कि यह काम क्यों नहीं किया है। कुछ लोगों ने ऊपर टिप्पणी की कि यह बेमानी है। यह सच है, लेकिन आपको बेहतर त्रुटि से निपटने में मदद मिलती है जो कुछ मामलों में आवश्यक हो सकती है।

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