数据存储(2)---文件存储
来源:互联网 发布:承接工程项目软件 编辑:程序博客网 时间:2024/05/16 02:26
选择内部或者外部存储
内部存储:
(1)它总是可用的
(2)默认的文件保存在这里
(3)当卸载App的时候,文件会一起移除
外部存储:
(1)它不一定是可用的,如果没有外部存储,没有sd卡之类的,就不可用了。
(2)不能控制文件的安全性,因为是world-readable的
(3)卸载app时,它还是会存在的,除非我们保存数据的时候调用的是这个方法 getExternalFilesDir()(调用这个方法,卸载的时候,就一起卸载了哦)
小诀窍:
虽然App默认的是内存储,但是我们可以在配置清单中用这个属性来定义它默认存储位置android:installLocation
获得一个外部存储的权限
这种东西记不记无所谓,反正到时候会报错的,看到log日志,然后填写对应的权限即可了。
写的权限:
<manifest ...> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ...</manifest>有时候,我们不一定要写,但是如果要读取的话,就要读的权限:
<manifest ...> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ...</manifest>
保存一个文件到内部存储中
获得路径:getFilesDir() 返回当前应用程序的内部路径的一个目录。
getCacheDir() 内部存储中当前路径的缓存目录。如果内存不足,直接清除一些缓存的文件。
例子:创建一个内部存储的文件:
File file = new File(context.getFilesDir(), filename);
或者是这样:调用openFileOutput() 来获得一个FileOutputStream 。例子:
String filename = "myfile";String string = "Hello world!";FileOutputStream outputStream;try { outputStream = openFileOutput(filename, Context.MODE_PRIVATE); outputStream.write(string.getBytes()); outputStream.close();} catch (Exception e) { e.printStackTrace();}或者是创建缓存文件:
public File getTempFile(Context context, String url) { File file; try { String fileName = Uri.parse(url).getLastPathSegment(); file = File.createTempFile(fileName, null, context.getCacheDir()); catch (IOException e) { // Error while creating file } return file;}我们App的内部存储的位置是固定的,就是我们的包名定义的。其他App想要访问我们必须知道我们的包名,还有我们的文件不能是私有的,如果我们的文件定义为MODE_PRIVATE的话,那么,其他的app也是不能访问的。
保存一个外部存储的文件
我们要先判断是否有没有这个外存储设备。例子:
/* Checks if external storage is available for read and write */public boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { return true; } return false;}/* Checks if external storage is available to at least read */public boolean isExternalStorageReadable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { return true; } return false;}
虽然外部存储被用户和其他应用程序修改,但是我们也还是可以保存成这样的两种文件:
Public files: 见名知意,大家都能用的,卸载的时候,它还是在滴
Private files:卸载的时候,自动移除的。
如果是想保存成Public的文件的话,可以用这个方法 getExternalStoragePublicDirectory() 来获得共有的路径。比如 DIRECTORY_MUSIC
或者是 DIRECTORY_PICTURES :
public File getAlbumStorageDir(String albumName) { // Get the directory for the user's public pictures directory. File file = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES), albumName); if (!file.mkdirs()) { Log.e(LOG_TAG, "Directory not created"); } return file;}
保存一个Private的文件用getExternalFilesDir()
方法
public File getAlbumStorageDir(Context context, String albumName) { // Get the directory for the app's private pictures directory. File file = new File(context.getExternalFilesDir( Environment.DIRECTORY_PICTURES), albumName); if (!file.mkdirs()) { Log.e(LOG_TAG, "Directory not created"); } return file;}
如果预先定义的子目录的名称不适合我们的文件,我们可以用getExternalFilesDir() 传入一个null的参数。它将会返回外部存储的根路径。
查询空闲的空间
获得剩余的存储空间和总的存储空间:
getFreeSpace() getTotalSpace()
删除文件
myFile.delete();
或者这样:
myContext.deleteFile(fileName);
记住!!!
当我们卸载app的时候,Android系统会删除这些文件:
(1)所有我们保存的内部存储文件。
(2)所有我们使用 getExternalFilesDir()
方法的外部存储文件。
我们应该有规律的手动的删除所有的缓存文件,还有有规律的手动删除那些我们不会再用到的文件。
- 数据存储(2)---文件存储
- 数据存储-文件存储
- 数据存储--文件存储
- 数据 的存储(2)使用文件存储
- android数据存储读取2:文件存储(对比IOS)
- Android-数据存储(文件存储)
- Android 数据存储(一)文件存储
- Android 数据存储 (二)文件存储
- Android 数据存储(二)文件存储
- 数据存储之一 文件存储
- 数据存储之文件存储
- 数据存储之文件存储
- Android 数据存储--文件存储
- 数据存储之文件存储
- 数据存储SharedPreferences、文件存储
- android 数据存储-文件存储
- 数据存储之文件存储
- 数据存储之文件存储
- Spring AOP进行日志记录,管理
- Ubuntu 手机开发培训准备
- 字符串习题
- java反射机制不支持可变参数
- SOA标准之----SCA架构思想
- 数据存储(2)---文件存储
- java正则去掉小数点后多余0
- 用JavaScript实现下拉菜单
- 安卓透明状态栏Translucent bar
- Apache下禁止php文件被直接访问的解决方案
- Prim算法
- 深入Android通过Apache HTTP访问HTTP资源(二)(转)
- A. Boredom
- 测试sphinx/coreseek xmlpipe2 support NOT compiled