2012-07-22 30 views
5

मैं अपने नए एंड्रॉइड प्रोजेक्ट में जेसीआईएफएस का उपयोग कर रहा हूं। किसी भी तरह से मैंने फ़ाइल पथ को सामान्यीकृत करने के लिए यूआरएल क्लास का उपयोग करने का निर्णय लिया है (इसलिए मैं बाद में अधिक प्रोटोकॉल जोड़ सकता हूं)। मैंने जो किया वहAndroid पर जेसीआईएफएस लाइब्रेरी का उपयोग करते समय यूआरएल में एसएमबी प्रोटोकॉल का उपयोग करते हुए

URL url = new URL("smb://192.168.1.1/filepath"); 

और फिर java.net.MalformedURLException अपवाद फेंक दिया गया है।

Exception in thread "main" java.net.MalformedURLException: unknown protocol: smb 
    at java.net.URL.<init>(URL.java:184) 
    at java.net.URL.<init>(URL.java:127) 

परामर्श JCIFS FAQ का पता चलता है मैं कक्षा उपयोग करने से पहले प्रोटोकॉल रजिस्टर करने के लिए है। हालांकि मुझे वास्तव में एंड्रॉइड में ऐसा करने का तरीका नहीं पता है। मुझे लगता है कि पुस्तकालय पहले से ही ऐसा करता है, लेकिन यह एंड्रॉइड पर नहीं है।

तो मुझे क्या करना चाहिए?

+0

आपने jcifs jar फ़ाइल कहां रखा? हैंडलर लोड होने के लिए यह उचित कक्षा में होना चाहिए। – medopal

+0

मैंने जार फ़ाइल को प्रोजेक्ट की/libs निर्देशिका में रखा है, जो मुझे लगता है कि यह क्लासपाथ में नहीं है। और मुझे लगता है कि एंड्रॉइड सामान्य जावा एप्लिकेशन की तुलना में क्लासपाथ को अलग-अलग संभालता है। –

उत्तर

0

URL ऑब्जेक्ट का उपयोग न करें। URL को सीधे SmbFile कन्स्ट्रक्टर में पास करें। उदाहरण के लिए:

SmbFile file = new SmbFile("smb://192.168.1.1/filepath"); 

फिर आप नियमित फ़ाइल के साथ जो कुछ भी कर सकते हैं वह कर सकते हैं।

+0

कारण मैं यूआरएल ऑब्जेक्ट का उपयोग करता हूं, मैं अन्य प्रोटोकॉल (और स्थानीय फाइल सिस्टम) का भी समर्थन करना चाहता हूं। यूआरएल का उपयोग प्रोटोकॉल के बीच इसे और अधिक अमूर्त बना सकता है। इसके अलावा मैं क्रियाकलापों के बीच पारित करने के लिए Serilizable ऑब्जेक्ट का उपयोग करना चाहता हूं, जो SmbFile नहीं है। –

+0

अच्छा लगता है, मुझे खुशी है कि आपने इसे समझ लिया! – 11101101b

5

मैंने अभी SMBFile संदर्भ में जेसीआईएफएस संदर्भ में उपयोग देखा है।

जब साथ java.net.URL वर्ग का उपयोग कर 'smb: //' यूआरएल यह पहले (स्थिर jcifs.Config.registerSmbURLHandler कॉल करने के लिए) के लिए आवश्यक है; तरीका। एसएमबी प्रोटोकॉल हैंडलर को पंजीकृत करने की आवश्यकता है।

तो मैं यह कॉल जोड़ता हूं और यह ठीक से काम करता है।

+0

जावाडोक: [http://stderr.org/doc/libjcifs-java-doc/api/jcifs/Config.html#registerSmbURL हैंडलर() ](http://stderr.org/doc/libjcifs-java-doc/api /jcifs/Config.html#registerSmbURL हैंडलर()) –

+0

पिछला लिंक उपलब्ध नहीं है, इसके बजाय https://jcifs.samba.org/src/docs/api/jcifs/Config.html#registerSmbURLHandler%28%29 का उपयोग करें – jneira