一、存储的位置目录
向sd写入数据需要一下权限
一个程序的私有数据存放在/data/data/包名/下,
常用的方法
- getFileDir(): 访问默认目录,创建file文件夹,存放重要的程序数据
- getCacheDir():访问默认目录,创建cache文件夹
这些方法都在 context 中
public abstract class Context
extends Object
(http://www.androiddoc.com/reference/java/lang/Object.html)
Context中的抽象方法在ComtextImpl中实现
二、android程序中文件权限
在android中,每个第三方的应用程序都是一个访问用户,在底层都是一个独立的用户,这样的好处是即给了程序很多权限,又能保证其他程序的安全,利用已有的linux的安全措施,省去很多的麻烦,具体如图
权限管理使用的是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进行存储的步骤:
- 创建SharedPreference变量
- 初始化sp变量
getSharedPreferences("文件名称",权限);
- 获取SharedPreference的编辑器
SharedPreference.Editor spEditor= sp.editor - 使用spEditor的putxxx()方法存数据,使用sp.getxxx()方法取数据
- 使用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实现其中的方法,实现默认的构造函数