Android基本数据存储方法
1.文件存储数据使用了Java中的IO操作来进行文件的保存和读取,只不过Android在Context类中封装好了输入流和输出流的获取方法。
创建的存储文件保存在/data/data/<package name>/files文件夹下。
2.操作。
保存文件内容:通过Context.openFileOutput获取输出流,参数分别为文件名和存储模式。
读取文件内容:通过Context.openFileInput获取输入流,参数为文件名。
删除文件:Context.deleteFile删除指定的文件,参数为将要删除的文件的名称。
获取文件名列表:通过Context.fileList获取files目录下的所有文件名数组。
*获取文件路径的方法:
绝对路径:/data/data/<package name>/files/filename
Context:Context.getFilesDir()可以获取到"/data/data/<package name>/files"
3.四种文件保存的模式。
Context.MODE_PRIVATE 为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下写入的内容会覆盖原文件的内容。
Context.MODE_APPEND 检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
MODE_WORLD_READABLE 表示当前文件可以被其他应用读取。
MODE_WORLD_WRITEABLE 表示当前文件可以被其他应用写入。
在使用模式时,可以用"+"来选择多种模式,比如openFileOutput(FILENAME, Context.MODE_PRIVATE + MODE_WORLD_READABLE);
下面通过程序来演示下文件存储的使用。完整代码下载:android_files.rar
[java] view plain copy
- /**
- *MainActivity
- *
- *@authorzuolongsnail
- *
- */
- publicclassMainActivityextendsActivity{
- privateEditTextwriteET;
- privateButtonwriteBtn;
- privateTextViewcontentView;
- publicstaticfinalStringFILENAME="setting.set";
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- writeET=(EditText)findViewById(R.id.write_et);
- writeBtn=(Button)findViewById(R.id.write_btn);
- contentView=(TextView)findViewById(R.id.contentview);
- writeBtn.setOnClickListener(newOperateOnClickListener());
- }
- classOperateOnClickListenerimplementsOnClickListener{
- @Override
- publicvoidonClick(Viewv){
- writeFiles(writeET.getText().toString());
- contentView.setText(readFiles());
- System.out.println(getFilesDir());
- }
- }
- //保存文件内容
- privatevoidwriteFiles(Stringcontent){
- try{
- //打开文件获取输出流,文件不存在则自动创建
- FileOutputStreamfos=openFileOutput(FILENAME,
- Context.MODE_PRIVATE);
- fos.write(content.getBytes());
- fos.close();
- }catch(Exceptione){
- e.printStackTrace();
- }
- }
- //读取文件内容
- privateStringreadFiles(){
- Stringcontent=null;
- try{
- FileInputStreamfis=openFileInput(FILENAME);
- ByteArrayOutputStreambaos=newByteArrayOutputStream();
- byte[]buffer=newbyte[1024];
- intlen=0;
- while((len=fis.read(buffer))!=-1){
- baos.write(buffer,0,len);
- }
- content=baos.toString();
- fis.close();
- baos.close();
- }catch(Exceptione){
- e.printStackTrace();
- }
- returncontent;
- }
- }
程序截图:
提供一个文件存储数据的工具类:
[java] view plain copy
- /**
- *文件存储数据方式工具类
- *
- *@authorzuolongsnail
- */
- publicclassFilesUtil{
- /**
- *保存文件内容
- *
- *@paramc
- *@paramfileName
- *文件名称
- *@paramcontent
- *内容
- */
- privatevoidwriteFiles(Contextc,StringfileName,Stringcontent,intmode)
- throwsException{
- //打开文件获取输出流,文件不存在则自动创建
- FileOutputStreamfos=c.openFileOutput(fileName,mode);
- fos.write(content.getBytes());
- fos.close();
- }
- /**
- *读取文件内容
- *
- *@paramc
- *@paramfileName
- *文件名称
- *@return返回文件内容
- */
- privateStringreadFiles(Contextc,StringfileName)throwsException{
- ByteArrayOutputStreambaos=newByteArrayOutputStream();
- FileInputStreamfis=c.openFileInput(fileName);
- byte[]buffer=newbyte[1024];
- intlen=0;
- while((len=fis.read(buffer))!=-1){
- baos.write(buffer,0,len);
- }
- Stringcontent=baos.toString();
- fis.close();
- baos.close();
- returncontent;
- }
- }
1.概述。SharePreferences是用来存储一些简单配置信息的一种机制,使用Map数据结构来存储数据,以键值对的方式存储,采用了XML格式将数据存储到设备中。例如保存登录用户的用户名和密码。只能在同一个包内使用,不能在不同的包之间使用,其实也就是说只能在创建它的应用中使用,其他应用无法使用。
创建的存储文件保存在/data/data/<package name>/shares_prefs文件夹下。
2.使用。
通过Context.getSharedPreferences方法获取SharedPreferences对象,参数分别为存储的文件名和存储模式。
- //获取SharedPreferences对象
- SharedPreferencessp=getSharedPreferences(DATABASE,Activity.MODE_PRIVATE);
- //获取Editor对象
- Editoreditor=sp.edit();
3.操作。SharePreferences存储数据是通过获取Editor编辑器对象来操作的。
插入数据:
调用Editor.putxxxx方法,两个参数分别为键和值。
获取数据:
调用Editor.getxxxx方法,两个参数分别为键和不存在指定键时的默认值。
删除数据:
调用Editor.remove方法,参数为指定的键。
清空所有数据:
调用Editor.clear方法
上述所有方法调用都要执行Editor.commit方法来提交。
下面通过对数据的增删改查来演示下SharePreferences的使用。
完整程序下载地址:android_sharedpreferences.rar
[java] view plain copy
- /**
- *MainActivity
- *
- *@authorzuolongsnail
- */
- publicclassMainActivityextendsActivity{
- privateEditTextkeyET;
- privateEditTextvalueET;
- privateButtoninsertBtn;
- privateButtondeleteBtn;
- privateButtonmodifyBtn;
- privateButtonqueryBtn;
- privateButtonclearBtn;
- privateTextViewtextView;
- /**存储的文件名*/
- publicstaticfinalStringDATABASE="Database";
- /**存储后的文件路径:/data/data/<packagename>/shares_prefs+文件名.xml*/
- publicstaticfinalStringPATH="/data/data/code.sharedpreferences/shared_prefs/Database.xml";
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- keyET=(EditText)findViewById(R.id.key);
- valueET=(EditText)findViewById(R.id.value);
- insertBtn=(Button)findViewById(R.id.insert);
- deleteBtn=(Button)findViewById(R.id.delete);
- modifyBtn=(Button)findViewById(R.id.modify);
- queryBtn=(Button)findViewById(R.id.query);
- clearBtn=(Button)findViewById(R.id.clear);
- //用于显示存储文件中数据
- textView=(TextView)findViewById(R.id.content);
- insertBtn.setOnClickListener(newOperateOnClickListener());
- deleteBtn.setOnClickListener(newOperateOnClickListener());
- modifyBtn.setOnClickListener(newOperateOnClickListener());
- queryBtn.setOnClickListener(newOperateOnClickListener());
- clearBtn.setOnClickListener(newOperateOnClickListener());
- }
- classOperateOnClickListenerimplementsOnClickListener{
- @Override
- publicvoidonClick(Viewv){
- //获取SharedPreferences对象
- SharedPreferencessp=getSharedPreferences(DATABASE,
- Activity.MODE_PRIVATE);
- //获取Editor对象
- Editoreditor=sp.edit();
- // 获取界面中的信息
- Stringkey=keyET.getText().toString();
- Stringvalue=valueET.getText().toString();
- switch(v.getId()){
- //插入数据
- caseR.id.insert:
- editor.putString(key,value);
- editor.commit();
- textView.setText(MainActivity.this.print());
- break;
- //删除数据
- caseR.id.delete:
- editor.remove(key);
- editor.commit();
- textView.setText(MainActivity.this.print());
- break;
- //修改数据
- caseR.id.modify:
- editor.putString(key,value);
- editor.commit();
- textView.setText(MainActivity.this.print());
- break;
- //查询数据
- caseR.id.query:
- Stringresult=sp.getString(key,"");
- textView.setText("key="+key+",value="+result);
- break;
- //清空所有数据
- caseR.id.clear:
- editor.clear();
- editor.commit();
- textView.setText(MainActivity.this.print());
- break;
- }
- }
- }
- /**获取存储文件的数据*/
- privateStringprint(){
- StringBufferbuff=newStringBuffer();
- try{
- BufferedReaderreader=newBufferedReader(newInputStreamReader(
- newFileInputStream(PATH)));
- Stringstr;
- while((str=reader.readLine())!=null){
- buff.append(str+"/n");
- }
- }catch(Exceptione){
- e.printStackTrace();
- }
- returnbuff.toString();
- }
- }
程序截图:
下面提供一个SharedPreferences工具类,在开发中直接调用即可。
[java] view plain copy
- /**
- *SharedPreferences存储数据方式工具类
- *@authorzuolongsnail
- */
- publicclassSharedPrefsUtil{
- publicfinalstaticStringSETTING="Setting";
- publicstaticvoidputValue(Contextcontext,Stringkey,intvalue){
- Editorsp=context.getSharedPreferences(SETTING,Context.MODE_PRIVATE).edit();
- sp.putInt(key,value);
- sp.commit();
- }
- publicstaticvoidputValue(Contextcontext,Stringkey,booleanvalue){
- Editorsp=context.getSharedPreferences(SETTING,Context.MODE_PRIVATE).edit();
- sp.putBoolean(key,value);
- sp.commit();
- }
- publicstaticvoidputValue(Contextcontext,Stringkey,Stringvalue){
- Editorsp=context.getSharedPreferences(SETTING,Context.MODE_PRIVATE).edit();
- sp.putString(key,value);
- sp.commit();
- }
- publicstaticintgetValue(Contextcontext,Stringkey,intdefValue){
- SharedPreferencessp=context.getSharedPreferences(SETTING,Context.MODE_PRIVATE);
- intvalue=sp.getInt(key,defValue);
- returnvalue;
- }
- publicstaticbooleangetValue(Contextcontext,Stringkey,booleandefValue){
- SharedPreferencessp=context.getSharedPreferences(SETTING,Context.MODE_PRIVATE);
- booleanvalue=sp.getBoolean(key,defValue);
- returnvalue;
- }
- publicstaticStringgetValue(Contextcontext,Stringkey,StringdefValue){
- SharedPreferencessp=context.getSharedPreferences(SETTING,Context.MODE_PRIVATE);
- Stringvalue=sp.getString(key,defValue);
- returnvalue;
- }
- }
更多相关文章
- Android安装常见的一些解决方法
- android 关机闹钟
- Android(安卓)简单的Http框架
- Android(安卓)Resources Overview —— Android(安卓)资源文件
- Android——“i分享”APP开发Day11
- 【Android测试工具】02. Android抓包解析全过程
- Android:自定义DialogFragment的内容和按钮
- android 访问/assets 和/res目录下文件的方法
- Android写SD卡的坑