Android存储

1 Shared Preferences : 通过key-value方式存放私有数据

2 Internal Storage : 存放数据在设备的存储器中

默认情况,放在Internal Storage中的文件是app私有的,其它app无法访问它。当用户卸载app时,对应的文件也会移除。
Demo:存放一个文件到Internal Storage,然后再读取此文件中的内容。

- 写入文件代码

String str = "hello world!";
String CurrentStr =str + " \n" + DateFormat.getDateTimeInstance().format(new Date());
FileOutputStream fos = openFileOutput(FILENAME,MODE_PRIVATE);
fos.write(CurrentStr.getBytes());
fos.close();

- 读取文件代码

FileInputStream fis = openFileInput(FILENAME);
byte[] buffer = new byte[1024];         
ByteArrayOutputStream out = new ByteArrayOutputStream();                    
int bytesRead = 0;
bytesRead = fis.read(buffer);                   
fis.close();

- 其它函数代码(getCacheDir() , getFilesDir(), fileList())

output = "getCacheDir() : "+ getCacheDir().toString() + "\n";
output = output + "getFilesDir() : " + getFilesDir().toString() + "\n";
String[] list = fileList();
int n = 0;
while(n < list.length){
    output = output + "fileList() "+ n + " : " + list[n] + "\n";
    n++;
}
Toast.makeText(StorageActivity.this, output, Toast.LENGTH_LONG).show();     

分析:

    通过openFileOutput(String, int)存放的文件防止在/data/data/com.lewi.androidtestapp/files中,此目录也是getFilesDir()访问的路径。
    如果要存放cache数据,应该通过getCacheDir()打开文件。当系统的internal storage空间低时,Android系统可能会删除cache中的文件来回复空间。

3 External Storage : 存放共有数据在共享的外部存储

每个兼容android的设备都支持共享的“External Storage”去存储文件。可能是可以插拔的SD卡,或者不可移除的internal storage。

权限

    当需要读或写External Storage时,app需要再Manifest里面增加READ_EXTERNAL_STORAGE或WRITE_EXTERNAL_STORAGE。如下:
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Demo:

- 增加一个相册目录
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),albumName);
if(file.exists()){
    Toast.makeText(StorageActivity.this, "Folder exists, please remove it first ", Toast.LENGTH_SHORT).show();  
}else{
    if(file.mkdirs()){
        Log.e(mTag, "Directory not created");
    }
    Toast.makeText(StorageActivity.this, "Create new folder : " + albumName , Toast.LENGTH_SHORT).show();           
}
- 删除一个相册目录
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),albumName);
if(file.exists()){
    file.delete();
    Toast.makeText(StorageActivity.this, "folder " + albumName + " is deleted", Toast.LENGTH_SHORT).show(); 
}else{
    Toast.makeText(StorageActivity.this, "Please create folder first", Toast.LENGTH_SHORT).show();
}
- 其它函数(getExternalStorageState(), getExternalStoragePublicDirectory(),getExternalCacheDir())
output = "Environment.getExternalStorageState() : " + Environment.getExternalStorageState() + "\n\n";
output = output + " getExternalStoragePublicDirectory() : " + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES) + "\n\n";
output = output + " getDownloadCacheDirectory() :" + Environment.getDownloadCacheDirectory() + "\n\n";
output = output + " getExternalCacheDir() :" + getApplicationContext().getExternalCacheDir() + "\n";
Toast.makeText(StorageActivity.this, output, Toast.LENGTH_LONG).show(); 

截图:
这里写图片描述

4 SQLite Databases : 存放结构化数据在私有的数据库中

5 Network Connection:存放在网络服务器中

使用java.net.* 和android.net.* package来实现。    

Reference:

http://developer.android.com/intl/zh-cn/guide/topics/data/data-storage.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值