2013-02-25 57 views
5

在android設備中,外部存儲器可能存在也可能不存在。我應該在哪裏寫一個臨時文件?

我正在寫一個應用程序,在一個案例中,來自URL &的流mp3會將其存儲在內存中用於臨時目的的文件中。

但我想確定那個文件會被創建。

首先我想用getCacheDir的,但它提到:

這些文件將是那些在設備上運行存儲 之低,會首先被刪除。無法保證這些文件何時會被刪除,其中 。注意:您不應該依賴系統爲您刪除這些文件 ;您應始終擁有合理的最大值,例如1 MB, 用於緩存文件佔用的空間量,並在超過該空間時修剪那些 文件。

那麼,我想到使用getExternalCacheDir,但後來我不確定設備是否包含外部存儲器。

還有一個可選問題: 將文件保存到內存之前,我想檢查目錄是否有足夠的空間。如何才能做到這一點?

更新

我也想過創造Environment.getDownloadCacheDirectory()文件,因爲它可能會使用每個設備上。

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

但低於了在createNewFile錯誤跟蹤():

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> 

請建議。 謝謝

+0

爲什麼不在你的應用程序數據目錄中? – RvdK 2013-02-25 11:25:33

+0

你需要自己設計這樣的邏輯。我的意思是驗證哪些外部存儲器可用,以及它是否有足夠的空間用於所需的文件操作。它的一次設置和後來你準備去:) – waqaslam 2013-02-25 11:30:43

+0

謝謝@Waqas @Rvdk。好吧,所以我經歷了一些Android環境變量,即。 'getExternalStorageDirectory; getDownloadCacheDirectory; getDataDirectory'。我想用'getDownloadCacheDirectory()'。我想它會在所有的設備上可用。 (請糾正,如果我錯了) – reiley 2013-02-25 18:43:38

回答

1

您將文件寫入/ data/data /。 your-package-name與AndroidManifest.xml文件中提到的名稱相同。

相關問題