2011-10-12 12 views
13

मैं पढ़ने के लिए एक फाइल खोलने की कोशिश कर रहा था।एंड्रॉइड ओपन फाइल

का उपयोग करते समय: Scanner input = new Scanner(filename); फ़ाइल

नहीं पाया जा सका लेकिन जब मैं प्रयोग किया है:

InputStream in = openFileInput(filename); 
Scanner input = new Scanner(in); 

यह काम किया। कोड की पहली पंक्ति गलत क्यों थी?

उत्तर

10

फ़ाइलों को एक विशिष्ट, एप्लिकेशन-निर्भर स्थान में डिवाइस पर संग्रहीत किया जाता है, जो मुझे लगता है कि फ़ाइल नाम की शुरुआत में openFileInput जोड़ता है। अंतिम परिणाम (स्थान + फ़ाइल नाम) के रूप में निर्माण किया है:

/data/data/<application-package>/files/<file-name> 

भी ध्यान रखें कि प्रलेखन कहा गया है कि openFileInput पैरामीटर cannot contain path separators

हार्ड-कोड स्थान पथ है, जो सिद्धांत रूप में भी डिवाइस से डिवाइस पर अलग अलग हो सकता है बचने के लिए आप getFilesDir को फोन करके एक File वस्तु भंडारण निर्देशिका की ओर इशारा करते प्राप्त कर सकते हैं, और इसका इस्तेमाल पढ़ने के लिए जो कुछ भी फ़ाइल आप चाहते हैं सेवा मेरे।

File filesDir = getFilesDir(); 
Scanner input = new Scanner(new File(filesDir, filename)); 

ध्यान दें कि एक String एक पैरामीटर के रूप में उत्तीर्ण होकर एक Scanner निर्माण स्ट्रिंग, यानी वास्तविक सामग्री के रूप में यह व्याख्या की सामग्री पर काम कर स्कैनर में परिणाम के नाम के रूप में के बजाय स्कैन करने के लिए होगा: उदाहरण के लिए खोलने के लिए एक फाइल।

+0

धन्यवाद !! मैंने शुरुआत में गलत कन्स्ट्रक्टर का उपयोग किया: पी .. तो मैंने स्कैनर एससी = नया स्कैनर (नई फ़ाइल (फ़ाइल नाम) का उपयोग करने की कोशिश की; लेकिन यह काम नहीं किया ... फाइल फाइलें Dir = getFilesDir(); स्कैनर इनपुट = नया स्कैनर (नई फ़ाइल (फ़ाइलें डीआईआर, फ़ाइल नाम)); यह बहुत अच्छा काम करता है: डी – zSt

-4
Scanner sc = new Scanner(new File(filename)); 
+10

क्या आप अधिक जानकारी प्रदान कर सकते हैं? चारों ओर कोड फेंकना किसी की मदद नहीं करता है ... – WarrenFaith

9

इससे मुझे कुछ मिनट पहले पागल जोड़ा गया।

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

मैं एक अनुमति संदेश से इनकार उम्मीद करेंगे: मैं प्रकट करने के लिए इस लाइन को जोड़ने के लिए भूल गया था। लेकिन सिर्फ एक फ़ाइल नहीं मिली ...

मिला आपके मामले में:openFileInput अपने निजी एप्लिकेशन डेटा निर्देशिका (/data/data/your.package/filename) में एक फ़ाइल को खोलता है। यह कभी विफल नहीं होता है। लेकिन स्कैनर इसे रूट पथ पर खोलने की कोशिश करता है। तो जब आप Environement.getExternalStorageDirectory().getAbsolutePath() + "/" + filename का उपयोग करेंगे तो आप एसडी कार्ड से एक फ़ाइल पढ़ना चाहते हैं।

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