2011-09-30 7 views
5

FileOutputStream को FileInputStream में परिवर्तित करने का सबसे आसान तरीका क्या है (कोड का एक टुकड़ा बहुत अच्छा होगा)?FileOputputStream FileInputStream में

+4

क्या आप यह भी समझते हैं कि आप यहां क्या पूछ रहे हैं? आपका मतलब क्या है "कन्वर्ट"? वे मौलिक रूप से विपरीत चीजें हैं; एक पढ़ने के लिए है और दूसरा लेखन के लिए है। क्या आप अपनी 'फाइलऑटपुटस्ट्रीम' में जो फ़ाइल लिख रहे हैं उसे पढ़ने की कोशिश कर रहे हैं? –

+1

आप वास्तव में क्या करना चाहते हैं? एक फ़ाइलऑटपुटस्ट्रीम एक फ़ाइल को लिखता है, और एक फ़ाइल इनपुटपुट एक फ़ाइल से पढ़ता है। मैं यह देखने में असफल रहा कि पूर्व को बाद में कैसे परिवर्तित किया जा सकता है। –

+0

मुझे एक फ़ाइलऑटपुटस्ट्रीम प्राप्त होता है। मैं जो चाहता हूं उसे पढ़ा जाता है। – Pen

उत्तर

14

यह आपकी मदद कर सकता है:

http://ostermiller.org/convert_java_outputstream_inputstream.html

यह लेख 3 संभावनाएं का उल्लेख है:

  • एक बाइट सरणी में पूरा उत्पादन लिखना तो इसे फिर से
  • उपयोग पाइप
  • पढ़ एक गोलाकार बाइट बफर (उस पृष्ठ पर होस्ट की गई लाइब्रेरी का हिस्सा) का उपयोग करें


बस संदर्भ के लिए , यह इसका उल्टा (उत्पादन के लिए इनपुट) कर रही:

साथ अपाचे कॉमन्स आईओ एक सरल समाधान होगा:

IOUtils.copyLarge(InputStream, OutputStream) 

या यदि आप बस एक फ़ाइल कॉपी करना चाहते हैं:

FileUtils.copyFile(inFile,outFile); 

यदि आप अपाचे कॉमन्स आईओ का उपयोग नहीं करना चाहते हैं, तो यहां है टी copyLarge विधि करता है:

public static long copyLarge(InputStream input, OutputStream output) throws IOException 
{ 
    byte[] buffer = new byte[4096]; 
    long count = 0L; 
    int n = 0; 
    while (-1 != (n = input.read(buffer))) { 
    output.write(buffer, 0, n); 
    count += n; 
    } 
    return count; 
} 
+1

लिंक टूटा हुआ है, लेकिन आप अभी भी मूल उत्तर यहां प्राप्त कर सकते हैं: https://web.archive.org/web /20110929161214/http://ostermiller.org/convert_java_outputstream_inputstream.html – GregT

1

आप @Thomas उदाहरण दिया उपयोग कर सकते हैं, अन्यथा आप कर सकते हैं:

import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.InputStream; 
import java.io.OutputStream; 

public class FileInputOutputExample { 
    public static void main(String[] args) throws Exception { 

    InputStream is = new FileInputStream("in.txt"); 
    OutputStream os = new FileOutputStream("out.txt"); 
    int c; 
    while ((c = is.read()) != -1) { 
     System.out.print((char) c); 
     os.write(c); 
    } 
    is.close(); 
    os.close(); 

    } 
} 

उदाहरण से java2s.com

संपादित करें:

के रूप में @ थॉमस ने अपना जवाब हटा दिया, मैं इसे संदर्भित करने के लिए संदर्भ कॉमन्स आईओ दृष्टिकोण के लिए जोड़ दूंगा:

IOUtils.copy(InputStream is, OutputStream os) 
+0

मैं यह देखने में असफल रहा कि यह "फ़ाइलऑटपुटस्ट्रीम 'को' फ़ाइल इनपुट स्ट्रीम 'में परिवर्तित कर रहा है।" –

+0

दरअसल मेरा उदाहरण दूसरा रास्ता था (आउटपुट में इनपुट), इसलिए मैंने इसे हटा दिया। यदि यह अभी भी प्रासंगिक है, तो मैं संदर्भ के लिए इसे हटा सकता हूं। – Thomas

+0

@ मार्क: यह सच है, मैंने अभी माना है कि वह दूसरे को – Kris

2

यदि आप का मतलब है कि आप लिखने के बाद सामग्री को पढ़ने के बिना (डिस्क पर फ्लश किए बिना) पढ़ने में सक्षम होना चाहते हैं, तो बाइटएरेऑटपुटस्ट्रीम और बाइटएरे इनपुट इनपुट का उपयोग करें। एक बार जब आप ByteArrayOutputStream पर लिख लेते हैं, तो आप अंतर्निहित बाइट डेटा प्राप्त कर सकते हैं और इसे वापस पढ़ने के लिए बाइटएरे इनपुट इनपुट का उपयोग कर सकते हैं।

ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 
// do any output onto outStream you need 
ByteArrayInputStream inStream = new ByteArrayInputStream(outStream.toByteArray()); 
// you can read back the output with inStream now 

आप एक बफर (निर्माता/उपभोक्ता प्रकार समस्या) चाहते हैं, जावा के NIO पैकेज के साथ प्रदान की बफ़र पर गौर।

4

मुझे एक फ़ाइलऑटपुटस्ट्रीम प्राप्त होता है। मैं जो चाहता हूं उसे पढ़ा जाता है।

आप निश्चित रूप से OutputStream से नहीं पढ़ सकते हैं। मुझे लगता है कि आप का मतलब है कि आप FileOutputStream द्वारा लिखी गई फ़ाइल से पढ़ना चाहते हैं। मुझे नहीं लगता कि आप इसे भी कर सकते हैं। FileOutputStream फ़ाइल को संदर्भित करने के संदर्भ में प्रतीत नहीं होता है।

आप क्या करने की जरूरत की खोज क्या File या पथ (एक String) FileOutputStream में पारित किया गया था और है कि एक ही File या String का उपयोग एक नया FileInputStream तैयार करना है।

+3

के नीचे इस तरह से जोड़ा है, मुझे लगता है कि वह FileDutputStream.getFD() को फ़ाइलडिस्क्रिप्टर प्राप्त करने के लिए उपयोग कर सकता है; इसके चारों ओर एक FileInputStream बनाने के बजाय। सुनिश्चित नहीं है कि आप एक ही फ़ाइलडिस्क्रिप्टर के साथ-साथ पढ़ और लिख सकते हैं। –

+0

@ एसएल बार्थ: अच्छा बिंदु, मैंने वास्तव में उसमें ध्यान दिया था लेकिन इस तथ्य को याद किया कि 'FileInputStream' में एक निर्माता है जो' फाइलडिस्क्रिप्टर 'लेता है। –

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