android中数据存储与访问

一、存储的位置目录

向sd写入数据需要一下权限




一个程序的私有数据存放在/data/data/包名/下,
常用的方法

  1. getFileDir(): 访问默认目录,创建file文件夹,存放重要的程序数据
  2. getCacheDir():访问默认目录,创建cache文件夹
    这些方法都在 context 中
public abstract class Context
extends Object
(http://www.androiddoc.com/reference/java/lang/Object.html)

Context中的抽象方法在ComtextImpl中实现

二、android程序中文件权限

在android中,每个第三方的应用程序都是一个访问用户,在底层都是一个独立的用户,这样的好处是即给了程序很多权限,又能保证其他程序的安全,利用已有的linux的安全措施,省去很多的麻烦,具体如图


android中数据存储与访问_第1张图片
172434_uBEH_28.png

权限管理使用的是linux的权限管理。每个程序就是一个user

三、存取数据的方法

一、存取文件

android中的存取文件的方法是对 java 的一个组织
常用方法
openFileOutput()
实现的细节

@Overridepublic FileInputStream openFileInput(String name)    throws FileNotFoundException {    
File f = makeFilename(getFilesDir(), name);    
return new FileInputStream(f);
}
@Overridepublic File OutputStream openFileOutput(String name, int mode)    throws FileNotFoundException {   
 final boolean append = (mode&MODE_APPEND) != 0;    
File f = makeFilename(getFilesDir(), name);    
try {        
       FileOutputStream fos = new FileOutputStream(f, append);     
       setFilePermissionsFromMode(f.getPath(), mode, 0);       
       return fos;   
 } catch (FileNotFoundException e) 
{    }    
File parent = f.getParentFile();    
parent.mkdir();   
FileUtils.setPermissions(parent.getPath(),  FileUtils.S_IRWXU|FileUtils.S_IRWXG|FileUtils.S_IXOTH,  -1, -1);    
FileOutputStream fos = new FileOutputStream(f, append);    setFilePermissionsFromMode(f.getPath(), mode, 0);    
return fos;

二、SharedPreference存储数据

SharePreference的存储位置为data/data/包名/shared_prefs,
它的存储文件最终为xml文件,只不过标签变得固定。使用了固定的节点标签,如下:



    

使用SharedPreference可以存储配置文件,数据不是很复杂的数据。
SharedPreference进行存储的步骤:

  1. 创建SharedPreference变量
  2. 初始化sp变量
getSharedPreferences("文件名称",权限);
  1. 获取SharedPreference的编辑器
    SharedPreference.Editor spEditor= sp.editor
  2. 使用spEditor的putxxx()方法存数据,使用sp.getxxx()方法取数据
  3. 使用commit()提交数据。
    全部代码:
SharedPreferences sp=null;
sp=getSharedPreferences("config",MODE_PRIVATE);
SharedPreferences.Editor spEditor=sp.edit();spEditor.putBoolean("isSave",isChecked);
spEditor.commit();

读取的代码

SharedPreferences sp=null;
sp=getSharedPreferences("config",MODE_PRIVATE);
Boolean isCheck=sp.getBoolean("isSave",false);

三、XML存取

xml进行存储

xml存储数据主要通过XmlSerializer完成。
过程

FileOutputStream fos=new FileOutputStream(new File(Environment.getExternalStorageDirectory(),"info.xml"));
//初始化xml序列
XmlSerializer xmls=Xml.newSerializer();
//设置输出流
xmls.setOutput(os,"utf-8");

try {   
//xml的头文件
xmls.startDocument("utf-8",true);  
//开始xml的根节点
xmls.startTag(null,"name");    
xmls.endTag(null,"name");   
 //结束
xmls.endDocument();  
//关闭文件输出流  
fos.close();} 
catch (IOException e) 
{    
e.printStackTrace();
}
  while (flag != XmlPullParser.END_DOCUMENT) {
                switch (flag) {
                    case XmlPullParser.START_DOCUMENT:
                        bookList = new ArrayList();
                        break;
                    case XmlPullParser.START_TAG: {
                        if ("book".equals(xmlp.getName())) {
                            book = new Book();
                        } else if ("id".equals(xmlp.getName())) {
                            book.setId(Integer.parseInt(xmlp.nextText()));
                            flag = xmlp.next();
                        } else if ("name".equals(xmlp.getName())) {
                            book.setName(xmlp.nextText());
                            flag = xmlp.next();
                        } else if ("price".equals(xmlp.getName())) {
                            book.setPrice(Float.parseFloat(xmlp.nextText()));
                            flag = xmlp.next();
                        }
                    }
                    break;
                    case XmlPullParser.END_TAG: {
                        if ("book".equals(xmlp.getName())) {
                            bookList.add(book);
                            book = null;
                        }
                    }
                    break;
                }

                flag = xmlp.next();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

三、数据库存取

常用的数据库的步骤为:
1 创建数据库访问类继承SqliteOprenHelper实现其中的方法,实现默认的构造函数

你可能感兴趣的:(android中数据存储与访问)