2011-03-01 10 views
31
FileReader rd=new FileReader("new.mp4"); 
FileWriter wr=new FileWriter("output.mp4"); 
int ch; 
while((ch=rd.read())!=-1) 
    wr.write(ch); 

wr.flush(); 
wr.close(); 

जब मैं FileReader और FileWriter पढ़ना और लिखना mp4 फ़ाइल का उपयोग .... output.mp4 फ़ाइल अच्छी तरह से गाया नहीं जा सकता है .... लेकिन जब मैं FileInputStream और FileOutputStream बजाय का उपयोग यह अच्छी तरह से काम किया।FileInputStream बनाम FileReader

तो क्या मैं FileReader निष्कर्ष निकाल सकता हूं और लेखक केवल पाठ पढ़ने और लिखने के लिए हैं?

+1

http://download.oracle.com/javase/tutorial/essential/io/charstreams.html – Yaneeve

उत्तर

41

हां, आपका निष्कर्ष Reader और Writer के सही उप-वर्ग हैं जो टेक्स्ट सामग्री को पढ़ने/लिखने के लिए हैं। InputStream/OutputStream बाइनरी सामग्री के लिए हैं। आप प्रलेखन पर एक नज़र डालें, तो:

Reader - चरित्र को पढ़ने के लिए सार वर्ग धाराओं

InputStream - सार वर्ग बाइट्स की एक इनपुट धारा का प्रतिनिधित्व सभी वर्गों के सुपर क्लास है।

+0

इसलिए मैं केवल .txt फ़ाइल पढ़ सकता हूं .. क्योंकि पीडीएफ, शब्द फ़ाइल में छवि फ़ाइलें भी शामिल हैं .. यह – saravanan

+0

@ सरवन हां, केवल टेक्स्ट फाइलें नहीं हैं। पीडीएफ और डॉक्टर जटिल प्रारूप हैं जिन्हें अर्थपूर्ण रूप से पार्स करने के लिए विशेष पुस्तकालयों की आवश्यकता होती है। – Bozho

+0

@ बोझो: मैं इन पुस्तकालयों को अपने पीजीएम में उपयोग करने के लिए कहां पा सकता हूं और जावा निर्माता केवल पढ़ने के लिए चरित्र धाराओं को बनाने के लिए सामान लेते हैं .txt फ़ाइलें – saravanan

23

FileReader (और वास्तव में कुछ भी विस्तार रीडर) पाठ के लिए वास्तव में है। से documentation of Reader: चरित्र को पढ़ने के लिए

सार वर्ग धाराओं।

(। जोर मेरा) एपीआई को देखो और आप इसे सभी पाठ के साथ क्या करना है या नहीं - हर जगह charbyte के बजाय।

InputStream और OutputStream एमपी 4 फाइलों जैसे बाइनरी डेटा के लिए हैं।

व्यक्तिगत रूप से मैं FileReader से पूरी तरह से बचूंगा, क्योंकि यह हमेशा सिस्टम डिफ़ॉल्ट वर्ण एन्कोडिंग का उपयोग करता है। इसके बजाय, InputStreamReader का उपयोग FileInputStream के आसपास करें ... लेकिन केवल तभी जब आप टेक्स्ट से निपटना चाहते हैं।

एक अलग रूप में के रूप में, कि एक निर्गम के लिए एक इनपुट से नकल का एक बहुत अक्षम तरीका है ... जो में पढ़ने के लिए या एक बफर से लिखना read और write के भार के उपयोग करें - या तो एक byte[] या एक char[]। अन्यथा आप फ़ाइल में प्रत्येक बाइट/चरित्र के लिए पढ़ना और लिखना कॉल कर रहे हैं।

आपको finally ब्लॉक में बंद आईओ धाराएं बंद करनी चाहिए ताकि वे उन्हें संसाधित करते समय अपवाद फेंक दिए जाने पर भी बंद हो जाएं।

1

"फाइलवाइटर वर्णों की धाराओं को लिखने के लिए है। कच्चे बाइट्स की धाराओं को लिखने के लिए, फ़ाइलऑटपुटस्ट्रीम का उपयोग करने पर विचार करें।"

http://download.oracle.com/javase/1.4.2/docs/api/java/io/FileWriter.html

FileWriter और FileReader वर्ण का स्ट्रीम के लिए desinged कर रहे हैं ...

सादर।

फ़ुरकन

5

FileInputStream डेटा के कच्चे बाइट्स, कच्चे छवियों की तरह की धाराओं पढ़ने के लिए प्रयोग किया जाता है। FileReaders, दूसरे हाथ पर, वर्ण

FileInputStream और FileReader के बीच अंतर है, FileInputStream बाइट से फ़ाइल बाइट पढ़ता है और FileReader चरित्र से फ़ाइल चरित्र पढ़ता की धाराओं को पढ़ने के लिए उपयोग किया जाता है।

तो जब आप फ़ाइल जो चरित्र "Č", FileInputStream में 196 140 के रूप में परिणाम दे देंगे शामिल पढ़ने के लिए क्योंकि Č की ASCII मूल्य 268 है कोशिश कर रहे हैं।

FileReader में परिणाम 268 के रूप में परिणाम देगा जो Č के ASCII मान है।

0

एक पाठ फ़ाइल का उपयोग पढ़ा जा सकता है दोनों fileReader और fileInputStream लेकिन एमपी 3 और PNG केवल का उपयोग कर fileInputStream

  1. fileReader चार से चार पढ़ता

  2. fileInputStream बाइट द्वारा बाइट पढ़ता पढ़ा जा सकता है

संबंधित मुद्दे