2015-07-30 6 views
8

शीर्षक शीर्षक के रूप में, मुझे बाहरी संग्रहण में फ़ाइलों को लिखने में परेशानी हो रही है। मेरा डीबग डिवाइस एक नेक्सस 5 है। बात यह है कि, मैं डिवाइस से पूरी तरह से फ़ाइलों को पढ़ने में सक्षम हूं (मैं डाउनलोड फ़ोल्डर में से किसी के साथ प्रयास कर रहा हूं) लेकिन उन्हें लिख नहीं सकता। मुझे पता है कि डिवाइस को कंप्यूटर से कनेक्ट नहीं होने पर मुझे यह करना होगा। लेकिन यह या तो काम नहीं करता है।एंड्रॉइड में बाहरी स्टोरेज में फ़ाइलों को लिखना

वास्तव में, मैंने इसे लिखने से पहले एसडी कार्ड की स्थिति पढ़ने की कोशिश की है (जो निश्चित रूप से काम नहीं करता है)। जब डिवाइस मेरे पीसी से कनेक्ट किया गया था या नहीं तो राज्य "घुड़सवार" के रूप में दिखाया गया था। और मैंने बिना किसी सफलता के राज्य को Environment.MEDIA_MOUNTED_READ_ONLY और Environment.MEDIA_MOUNTED की तुलना की। मेरा डिवाइस इनमें से किसी भी राज्य में नहीं है।

एक चीज जो आपको जाननी चाहिए कि मेरे फोन में बाहरी एसडी कार्ड नहीं है, क्योंकि यह आंतरिक है। इसके परिणामस्वरूप मेरे डिवाइस में बाह्य भंडारण के लिए "/ भंडारण/नकली/0/..." निर्देशिका होती है।

मैं यह भी कहना होगा कि मैं अपने Android प्रकट में निम्नलिखित टैग को लागू किया है:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="ANDROID.PERMISSION.WRITE_EXTERNAL_STORAGE"/> 

मैं क्या हो रहा हो सकता है के लिए किसी भी सुराग नहीं है। एक और चीज जो मदद कर सकती है वह है कि मैंने Winrar (एंड्रॉइड के लिए) के साथ फ़ाइलों को प्रबंधित करने का प्रयास किया है और मैं अपने पीसी से जुड़े डिवाइस के साथ-साथ इसे कनेक्ट किए बिना फ़ाइलों को हटाने में सक्षम हूं। तो मुझे नहीं पता कि क्या करना है।

कोड जो मैं फ़ाइल लिखने के लिए उपयोग कर रहा हूं वह निम्नलिखित है। ध्यान रखें कि यह, एक छवि फ़ाइल (जो यह करता है) पढ़ना चाहिए यह एक स्ट्रिंग में कनवर्ट करते हैं, इसे वापस परिवर्तित एक छवि में और फिर डाउनलोड फ़ोल्डर में सहेजें:

File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() + "/base_image.jpg"); 
// Reading a Image file from file system 
FileInputStream imageInFile = new FileInputStream(file); 
byte imageData[] = new byte[(int) file.length()]; 
imageInFile.read(imageData); 

// Converting Image byte array into Base64 String 
String imageDataString = encodeImage(imageData); 

// Converting a Base64 String into Image byte array 
byte[] imageByteArray = decodeImage(imageDataString); 

File newFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "converted_image.jpg"); 

//Write a image byte array into file system 
FileOutputStream imageOutFile = new FileOutputStream(newFile); 

imageOutFile.write(imageByteArray); 

imageInFile.close(); 
imageOutFile.close(); 

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

+0

क्या आप वाकई फ़ाइल लिखने के लिए बाहर निकलते हैं? – Raghunandan

+0

मैं एक नई फाइल बना रहा हूं। या, कम से कम, मैं यही कोशिश कर रहा हूं। मुझे इसे बनाने की कोशिश करते समय फ़ाइल नहीं मिली और ईएसीसीईएस (अनुमति अस्वीकृत) त्रुटि प्राप्त हुई। यह मेरी मुख्य समस्या है। क्या मुझसे कुछ गलत हो रही है? – blastervla

उत्तर

4

बस ANDROID.PERMISSION.WRITE_EXTERNAL_STORAGEandroid.permission.WRITE_EXTERNAL_STORAGE पर uses-permission में ठीक करें।

मुझे इस समस्या का सामना करना पड़ा है, अनुमति में अपरकेस उपयोगी नहीं है।

+1

मैं संभवतः आपके उत्तर के लिए पर्याप्त धन्यवाद नहीं दे सकता। यह मुझे दिनों के लिए परेशान कर रहा है। बहुत बहुत धन्यवाद!! – blastervla

3

FileOutputStream स्वचालित रूप से फ़ाइल नहीं बनाता है यदि यह अस्तित्व में नहीं है।

तो, आपको जांचने और बनाने की आवश्यकता है कि आपकी फ़ाइल मौजूद नहीं है या नहीं।

if(!newFile.exists()) { 
    newFile.createNewFile(); 
} 

इस सहायता की आशा करें!

+0

आपकी तेज प्रतिक्रिया के लिए धन्यवाद। मैंने कोशिश की, लेकिन अब यह मुझे निम्नलिखित अपवाद फेंकता है: "java.io.IOException: खुला असफल: जब मैं 'newFile.createNewFile();' कॉल करता हूं तो ईएसीसीईएस (अनुमति अस्वीकार)" तरीका। क्या हो रहा है के लिए कोई विचार? – blastervla

+1

createFile() को कॉल करने से पहले यह 'newFile.getParentFile()। Mkdirs() 'को कॉल करें। अनुलेख खेद है कि अगर यह गलत है, तो मैं अपने सिर के ऊपर से जा रहा हूं :) – vedi0boy

+0

ठीक है आपने स्पष्ट रूप से अपने ऐप को उचित अनुमति नहीं दी है, क्या मैं देख सकता हूं कि मैनिफेस्ट में आपने अनुमतियां कहाँ जोड़ दी हैं। संपादित करें: अंतिम बयान हटा दिया गया, यह गलत था। – vedi0boy

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