最近学习了安卓数据库编程,一直没时间好好总结一下,因此今天抽空总结一下,算是给自己的知识升华一下。
首先,安卓数据存储分为五大类:
**1. Shared Preferences
- 外部存储(SD卡)
- 内部存储(手机内存)
- 网络存储
- SQLite Databases**
本篇博客先介绍手机内部和外部存储: 内部存储和外部也可以理解为File存储,谷歌为我们提供了两钟文件夹来存放File信息:
- files文件夹:存放重要文件,只有应用被卸载或者删除数据才会丢失
- cache文件夹:存放临时文件信息,应用删除缓存就删除文件数据
这两种文件夹都位于数据文件夹下
getFilesDir()//返回使用openFileOutput创建的文件的绝对路径
File file=getFilesDir();file.getPath();//返回/data/data/com.example.filestorage/files
File file=getCacheDir()
file.getPath();//返回data/data/com.example.filestorage/cache
## 内部存储 ##
在安卓中,Context给我们提供了两个方法来打开本应用程序文件夹下的文件的IO流。
File存储的文件位于应用文件夹/data/data/files
1 public abstract FileInputStream openFileInput(String name)//取得文件输入流
name:需要打开的文件,不能含有分隔符
2 public abstract FileOutputStream openFileOutput(String name, int mode)//取得文件输出流
name:需要打开的文件,不能含有分隔符
mode:打开文件的模式,安卓里面有四中文件创建模式:
MODE_APPEND//追加模式,可以向文件追加内容
MODE_PRIVATE//默认模式,私有模式,该文件只能被当前应用读写,并且输入新内容后就得内容会被删除
MODE_WORLD_READABLE//只读模式,该应用程序可以被其他应用程序读取
MODE_WORLD_WRITEABLE//可写模式,该应用程序可以被其他应用程序读写
**注意:只有MODE_APPEND模式才可以追加内容,其它模式在写入新内容时,就得内容就被删除。**
**MODE_WORLD_READABLE和 MODE_WORLD_WRITEABLE已经被不建议使用,如果需要和其他的应用程序分享数据,建议使用Contenprovider或者Broadcastreceiver。
外部存储
进行外部存储读取数据的步骤:
1 配置权限
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2 判断SD卡状态,即是否插入SD卡
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
如果返回true,则SD卡可用,false不可用
3 取得SD卡目录
Environment.getExternalStorageDirectory()
4 使用输出输入流读取SD卡文件数据
**内部存储示例代码*
```public class MainActivity extends ActionBarActivity {
private EditText et_write,et_query;
private static final String FILE_NAME="file1.txt";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView(){
et_write=(EditText)findViewById(R.id.et_write);
et_query=(EditText)findViewById(R.id.et_query);
}
public void click1(View view) throws Exception{
FileOutputStream fos=openFileOutput(FILE_NAME, MODE_APPEND);
String datas=et_write.getText().toString().trim();
fos.write(datas.getBytes());
Toast.makeText(MainActivity.this, "添加成功", 0).show();
fos.close();
}
public void click2(View view) throws Exception{
FileInputStream fis= openFileInput(FILE_NAME);
byte[] buff=new byte[1024];
//由于会修改和删除文件信息,所以为了减少内存开销,不建议使用不可改变字符串的String
StringBuilder sb=new StringBuilder();
int len=0;
while((len=fis.read(buff))!=-1){
sb.append(new String(buff));
}
et_query.setText(sb.toString());
Toast.makeText(MainActivity.this, "读取成功", 0).show();
}
片
`