2012-06-27 10 views
18

मेरे पास एक फ़ाइल है जो ज़िप, आरएआर, टीएक्सटी, सीएसवी, डॉक्टर इत्यादि जैसी कोई चीज हो सकती है। मैं बाइटएर्रेइन इनपुटस्ट्रीम से बनाना चाहता हूं।
मैं इसे Apache Commons Net से FTPClient के माध्यम से एफ़टीपी में फ़ाइल अपलोड करने के लिए उपयोग कर रहा हूं।जावा में फ़ाइल से ByteArrayInputStream कैसे बनाएं?

क्या कोई जानता है कि यह कैसे करें?

उदाहरण के लिए:

String data = "hdfhdfhdfhd"; 
ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes()); 

मेरे कोड:

public static ByteArrayInputStream retrieveByteArrayInputStream(File file) { 
    ByteArrayInputStream in; 

    return in;  
} 
+0

बाइट्स मैं RandomAccessFile का उपयोग करें और पहले एक बाइट सरणी में पूरी फ़ाइल बाइट्स हस्तांतरण में फ़ाइल पढ़ने के लिए। मैंने बाइट्स में फ़ाइलों को पढ़ने के लिए यह बेहद तेज़ तरीका पाया। –

+3

आपको ऐसा करने की आवश्यकता क्यों होगी? आप FileInputStream को एक ByteArrayOutputStream पर कॉपी करके और उसके बाद से एक ByteArrayInputStream बनाकर ऐसा कर सकते हैं। निश्चित रूप से इसके बजाय व्यर्थ। –

+0

कृपया अपने उपयोग के मामले की व्याख्या करें। आप शायद एक फ़ाइल इनपुट स्ट्रीम चाहते हैं। एक बार आपके पास इसका उपयोग करने की योजना कैसे है? –

उत्तर

28

Apache Commons IO से FileUtils#readFileToByteArray(File) का प्रयोग करें, और उसके बाद ByteArrayInputStream(byte[]) निर्माता का उपयोग कर ByteArrayInputStream पैदा करते हैं।

public static ByteArrayInputStream reteriveByteArrayInputStream(File file) { 
    return new ByteArrayInputStream(FileUtils.readFileToByteArray(file)); 
} 
+16

जैसा कि मेरे उत्तर में बताया गया है, जावा 7 में पहले से ही फाइल क्लास में एक readFileToByteArray है, अतिरिक्त लाइब्रेरी की आवश्यकता नहीं है। –

+6

असल में, जावा 7 में, यह 'Files.readAllBytes' –

13

सामान्य विचार है कि एक फ़ाइल एक FileInputStream और एक byte[] एक ByteArrayInputStream उपज होता है। दोनों InputStream को लागू करते हैं, इसलिए उन्हें किसी भी विधि के साथ संगत होना चाहिए जो पैरामीटर के रूप में InputStream का उपयोग करता है। एक byte[] में पूर्ण फ़ाइल में

  1. पढ़ने;:

    एक ByteArrayInputStream में फ़ाइल सारी सामग्री को लाना निश्चित रूप से किया जा सकता है जावा संस्करण> = 7 में फ़ाइल से सभी डेटा पढ़ने के लिए convenience method called readAllBytes है;

  2. फ़ाइल सामग्री के आस-पास ByteArrayInputStream बनाएं, जो अब स्मृति में है।

ध्यान दें कि यह बहुत बड़ी फ़ाइलों के लिए इष्टतम समाधान नहीं हो सकता है - सभी फाइल समय पर एक ही समय में स्मृति में संग्रहीत की जाएंगी। नौकरी के लिए सही धारा का उपयोग करना महत्वपूर्ण है।

3

यह वही नहीं है जो आप पूछ रहे हैं, लेकिन बाइट्स में फ़ाइलों को पढ़ने का एक तेज़ तरीका है।

File file = new File(yourFileName); 
RandomAccessFile ra = new RandomAccessFile(yourFileName, "rw"): 
byte[] b = new byte[(int)file.length()]; 
try { 
    ra.read(b); 
} catch(Exception e) { 
    e.printStackTrace(); 
} 

//Then iterate through b 
+0

है यदि आप कर सकते हैं तो कृपया कोड पूरा करें? – itro

4

एक ByteArrayInputStream एक बाइट सरणी के चारों ओर एक InputStream आवरण है। इसका मतलब है कि आपको फ़ाइल को byte[] में पूरी तरह से पढ़ना होगा, और फिर ByteArrayInputStream रचनाकारों में से एक का उपयोग करना होगा।

क्या आप ByteArrayInputStream के साथ क्या कर रहे हैं इसके बारे में और जानकारी दे सकते हैं? इसकी संभावना है कि आप जो हासिल करने की कोशिश कर रहे हैं उसके आस-पास बेहतर तरीके हैं।

संपादित करें:
आप अपलोड करने के लिए अपाचे FTPClient का उपयोग कर रहे हैं, तो आप सिर्फ एक InputStream की जरूरत है। तुम यह केर सकते हो;

String remote = "whatever"; 
InputStream is = new FileInputStream(new File("your file")); 
ftpClient.storeFile(remote, is); 

आपको इसके साथ समाप्त होने के बाद इनपुट स्ट्रीम को बंद करना याद रखना चाहिए।

+0

मैं इसे FTP क्लाइंट कॉमन्स अपाचे के माध्यम से ftp पर फ़ाइल अपलोड करने के लिए उपयोग कर रहा हूं। – itro

+0

@itro - FTPClient विवरण के साथ मेरा उत्तर अपडेट किया गया – Qwerky

1

कोड का यह टुकड़ा काम आता है:

private static byte[] readContentIntoByteArray(File file) 
{ 
    FileInputStream fileInputStream = null; 
    byte[] bFile = new byte[(int) file.length()]; 
    try 
    { 
    //convert file into array of bytes 
    fileInputStream = new FileInputStream(file); 
    fileInputStream.read(bFile); 
    fileInputStream.close(); 
    } 
    catch (Exception e) 
    { 
    e.printStackTrace(); 
    } 
    return bFile; 
} 

संदर्भ: http://howtodoinjava.com/2014/11/04/how-to-read-file-content-into-byte-array-in-java/

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