जावा में एक स्ट्रिंग से मेमोरी में एक फ़ाइल ऑब्जेक्ट बनाएं


113

मेरे पास एक फ़ंक्शन है जो फ़ाइल को एक तर्क के रूप में स्वीकार करता है। मैं अपने स्ट्रिंग डेटा को फंक्शन में पास करने के लिए एक नई फ़ाइल (फाइल सिस्टम तक नहीं लिख सकता हूं) बनाना / लिखना नहीं चाहता। मुझे यह जोड़ना चाहिए कि स्ट्रिंग डेटा फ़ाइल में मौजूद नहीं है (इसलिए मैं अपना डेटा फ़ाइल से नहीं पढ़ सकता)।

क्या मैं स्ट्रीम और "कास्ट" का उपयोग उन्हें फाइल ऑब्जेक्ट में कर सकता हूं?


2
क्या आप उस कोड को लिंक / पोस्ट कर सकते हैं जो Fileऑब्जेक्ट लेता है ? जैसा कि उत्तर में कहा गया है, एक Fileऑब्जेक्ट फाइलसिस्टम में एक स्थान के संदर्भ के समान है, और इसलिए एक वास्तविक फ़ाइल के बिना अनुकरण करना कठिन होगा। यदि, हालांकि, आपके फ़ंक्शन ने एक FileReaderया एक लिया FileInputStream, तो आप गैर-फ़ाइल इनपुट को स्वीकार करने के लिए आसानी से कोड को संशोधित कर सकते हैं।
101100

मेमोरी मैप्ड फाइलें आपकी पसंद हो सकती हैं। ये जावा में विशेष फाइलें हैं जो जावा प्रोग्राम को मेमोरी से सीधे कंटेंट एक्सेस करने की अनुमति देती हैं। जानकारी के लिए कृपया इस लिंक पर जाएं: javarevisited.blogspot.com/2012/01/…
बैक्टीरिया

जवाबों:


48

नहीं; वर्ग के उदाहरण Fileएक फाइलसिस्टम में एक पथ का प्रतिनिधित्व करते हैं। इसलिए, आप केवल फ़ाइल के साथ उस फ़ंक्शन का उपयोग कर सकते हैं। लेकिन शायद एक अधिभार है जो InputStreamइसके बजाय लेता है ?


76

आमतौर पर जब कोई विधि किसी फ़ाइल को स्वीकार करती है, तो पास में एक और तरीका होता है जो एक स्ट्रीम को स्वीकार करता है। यदि ऐसा नहीं है, तो एपीआई बुरी तरह से कोडित है। अन्यथा, आप अस्थायी फ़ाइलों का उपयोग कर सकते हैं, जहां आमतौर पर कई मामलों में अनुमति दी जाती है। यदि यह एप्लेट है, तो आप अनुमति लिखने का अनुरोध कर सकते हैं

एक उदाहरण:

try {
    // Create temp file.
    File temp = File.createTempFile("pattern", ".suffix");

    // Delete temp file when program exits.
    temp.deleteOnExit();

    // Write to temp file
    BufferedWriter out = new BufferedWriter(new FileWriter(temp));
    out.write("aString");
    out.close();
} catch (IOException e) {
}

1
अनुरोध लिखने की अनुमति नहीं दे सकता (यह Google AppEngine है)
जॉन रोमेरो

12

जावा में एक फ़ाइल ऑब्जेक्ट एक निर्देशिका या फ़ाइल के लिए एक पथ का प्रतिनिधित्व है, न कि फ़ाइल। किसी Fileऑब्जेक्ट को बनाने के लिए आपको फ़ाइल सिस्टम तक लिखने की आवश्यकता नहीं है , आपको केवल इसकी आवश्यकता है यदि आप वास्तव में फ़ाइल में लिखना चाहते हैं ( उदाहरण के लिए FileOutputStream का उपयोग करके )


1
यदि आपको किसी बाहरी एपीआई में एक फ़ाइल पास करने की आवश्यकता है, तो आपको एक वास्तविक फ़ाइल की आवश्यकता है - "खाली" फ़ाइल ऑब्जेक्ट पास करना काम नहीं करेगा।
आंद्रेई वोलगिन

8

Fileवर्ग आई / ओ के लिए एक फ़ाइल, नहीं उपयोग करने के लिए एक वास्तविक संभाल के "विचार" का प्रतिनिधित्व करता है। यही कारण है कि Fileकक्षा में एक .exists()विधि है, आपको यह बताने के लिए कि फ़ाइल मौजूद है या नहीं। (आपके पास कोई ऐसी Fileवस्तु कैसे हो सकती है जो मौजूद नहीं है?)

इसके विपरीत, new FileInputStream(new File("/my/file"))आपको बाइट्स पढ़ने के लिए एक वास्तविक स्ट्रीम देता है।


-1
FileReader r = new FileReader(file);

फ़ाइल रीडर लोड फ़ाइल का उपयोग करें और फिर इसकी सामग्री को एक स्ट्रिंग बफर पर लिखें।

उदाहरण

ऊपर दिया गया लिंक आपको एक उदाहरण दिखाता है कि इसे कैसे पूरा किया जाए। इस उत्तर के अन्य पोस्ट के अनुसार फ़ाइल को मेमोरी में लोड करने के लिए आपको वास्तविक एक्सेस में परिवर्तन करने की योजना नहीं है, जब तक कि आपको लिखने की पहुँच की आवश्यकता न हो।

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