2013-02-25 25 views
5

एंड्रॉइड डिवाइस में बाहरी मेमोरी मौजूद हो सकती है या नहीं भी हो सकती है।मुझे एक अस्थायी फ़ाइल कहां लिखनी चाहिए?

मैं एक ऐप लिख रहा हूं जो यूआरएल & से एक मामले स्ट्रीम एमपी 3 में इसे अस्थायी उद्देश्य के लिए स्मृति में फ़ाइल में संग्रहीत करता है।

लेकिन मैं यह सुनिश्चित करना चाहता हूं कि वह फ़ाइल बनाई जाएगी।

सबसे पहले मैं getCacheDir का उपयोग कर के बारे में सोचा है, लेकिन यह उल्लेख किया गया है:

इन फ़ाइलों को जो कि पहले हटा दिया जाता है जब डिवाइस कम भंडारण पर चलता हो जाएगा। कोई गारंटी नहीं है जब ये फ़ाइलें हटा दी जाएंगी। नोट: आपको इन फ़ाइलों को हटाने के लिए सिस्टम पर भरोसा नहीं करना चाहिए; आपके पास कैश फ़ाइलों के साथ उपयोग की जाने वाली जगह की मात्रा के लिए हमेशा एक उचित अधिकतम होना चाहिए, जैसे कि 1 एमबी, , और उस स्थान को पार करते समय उन फ़ाइलों को छीन लें।

तो, तो मैंने getExternalCacheDir का उपयोग करने के बारे में सोचा, लेकिन तब मुझे यकीन नहीं है कि डिवाइस में बाहरी मेमोरी होगी या नहीं।

एक और वैकल्पिक समस्या है: स्मृति में फ़ाइल को सहेजने से पहले, मैं यह जांचना चाहता हूं कि निर्देशिका में पर्याप्त स्थान है या नहीं। यह कैसे किया जा सकता है?

अद्यतन

मैं भी Environment.getDownloadCacheDirectory() में एक फ़ाइल बनाने के बारे में सोचा, के रूप में शायद यह हर डिवाइस पर उपलब्ध हो जाएगा।

java.io.IOException: Permission denied 
    at java.io.File.createNewFileImpl(Native Method) 
    at java.io.File.createNewFile(File.java:1257) 
    at com.example.activitylifecycle.MyStreamingApp.startStream(MyStreamingApp.java:42) 
    at com.example.activitylifecycle.MyStreamingApp.onCreate(MyStreamingApp.java:23) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1836) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1893) 
    at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1054) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:150) 
    at android.app.ActivityThread.main(ActivityThread.java:4385) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:507) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607) 
    at dalvik.system.NativeStart.main(Native Method) 

मैनिफ़ेस्ट फ़ाइल:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.activitylifecycle" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="15" /> 

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

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.activitylifecycle.ActivityLifeCycle" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".MyStreamingApp" 
      android:label="@string/app_name" > 
      <intent-filter android:priority="100" > 
       <action android:name="com.example.activitylifecycle.MYSTREAMINGAPP" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

कृपया सुझाव है

File f3 = new File(Environment.getDownloadCacheDirectory(), "Temp.txt"); 
    if (!f3.exists()) { 
     f3.createNewFile(); 
    } 

लेकिन नीचे() createNewFile में त्रुटि ट्रेस मिला है। धन्यवाद

+0

क्यों नहीं अपनी ऐप डेटा निर्देशिका में? – RvdK

+0

आपको ऐसे तर्क को स्वयं डिज़ाइन करने की आवश्यकता है। मेरा मतलब है कि कौन सा बाह्य भंडारण उपलब्ध है और यदि आपके पास आवश्यक फ़ाइल संचालन के लिए पर्याप्त जगह है। यह एक बार सेटअप और बाद में आप जाने के लिए तैयार हैं :) – waqaslam

+0

धन्यवाद @Waqas @Rvdk। ठीक है, तो मैं कुछ एंड्रॉइड 'Enviornement' युद्धों के माध्यम से चला गया, जैसे। 'GetExternalStorageDirectory; getDownloadCacheDirectory; getDataDirectory'। और मैं 'getDownloadCacheDirectory()' का उपयोग करने के बारे में सोचता हूं। मुझे लगता है कि यह सभी डिवाइस पर उपलब्ध होगा। (अगर मैं गलत हूं तो कृपया सही करें) – reiley

उत्तर

1

आप फ़ाइल/डेटा/डेटा/में फ़ाइल लिखते हैं। आपका-पैकेज-नाम AndroidManifest.xml फ़ाइल में उल्लिखित वही नाम है।