Android的内部存储和外部存储
使用内部存储
往内部存储内写文件(写入到/data/data/com.xxx.xxx/files目录下,com.xxx.xxx为应用程序包名):Android系统能够直接把文件存在设备的内部存储内。
默认情况下,保存在内部存储内的文件是应用程序私有的,其他应用程序(或用户)是无法访问的。
当用户卸载此应用程序时,内部存储的数据会一并清除。
在外部存储内保存缓存文件(/mnt/sdcard/Android/data/com.xxx.xxx/cache目录下)//要加权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>void createExternalStoragePrivateFile() { File file = new File(getExternalFilesDir(null), "DemoFile.jpg"); try { InputStream is = getResources().openRawResource(R.drawable.balloons); OutputStream os = new FileOutputStream(file); byte[] data = new byte[is.available()]; is.read(data); os.write(data); is.close(); os.close(); } catch (IOException e) { Log.w("ExternalStorage", "Error writing " + file, e); }}//要加权限<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>void deleteExternalStoragePrivateFile() { File file = new File(getExternalFilesDir(null), "DemoFile.jpg"); if (file != null) { file.delete(); }}boolean hasExternalStoragePrivateFile() { File file = new File(getExternalFilesDir(null), "DemoFile.jpg"); if (file != null) { return file.exists(); } return false;}getExternalFilesDir()方法有一个参数,如果传递null,则会得到应用程序的文件目录的根目录。如果传入其他(例如Environment.DIRECTORY_PICTURES)则会在/mnt/sdcard/Android/data/com.xxx.xxx/files目录下创建相应的文件夹(例如pictures文件夹),可以把上面的null替换成Environment.DIRECTORY_PICTURES试试
同样,在卸载应用的时候,文件会被删除
同样,这些文件是应用程序私有的
在外部存储上保存共享文件例子的话只需要把上面例子中的getExternalFilesDir(null)替换为getExternalCacheDir()
同样,在卸载应用的时候,文件会被删除
同样,这些文件是应用程序私有的
如果保存的文件不是应用程序所专有的,并且在应用程序被卸载时,不删除这些文件,那么就要把它们保存到外部存储器上的一个公共的目录上。这些目录位于外部存储器的根目录,如下:
Music/---媒体扫描器把在这个目录中找到所有媒体文件作为用户音乐。
Podcasts/---媒体扫描器把在这个目录中找到的所有媒体文件作为音/视频的剪辑片段。
Ringtones/---媒体扫描器把在这个目录中找到的所有媒体文件作为铃声。
Alarms/---媒体扫描器把在这个目录中找到的所有媒体文件作为闹钟的声音。
Pictures/---所有的图片(不包括那些用照相机拍摄的照片)。
Movies/---所有的电影(不包括那些用摄像机拍摄的视频)。
Download/---其他下载的内容。例子的话只需要把上面例子中的getExternalFilesDir(null)替换为Environment.getExternalStoragePublicDirectory(),此方法需要一个参数来指定公共目录类型(如Environment.DIRECTORY_MUSIC、Environment.DIRECTORY_PICTURES、Environment.DIRECTORY_RINGTONES或其他的类型。如果需要,这个方法会创建适当的目录)