2013-02-25 141 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文件中提到的名称相同。

相关问题