您的位置:首页 > 其它

数据的存储与访问

2014-05-28 21:33 148 查看
Android为数据存储提供了如下几种方式:

文件

SharedPreferences(参数)

SQLite数据库

内容提供者(Content provider)

网络


Activity提供了openFileOutput()方法可以用于把数据输出到文件中,openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。创建的文件保存在/data/data/<package name>/files目录。openFileOutput()方法的第二参数用于指定操作模式有四种模式,分别为:

Context.MODE_PRIVATE = 0

Context.MODE_APPEND = 32768

Context.MODE_WORLD_READABLE = 1

Context.MODE_WORLD_WRITEABLE = 2

Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND

Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。

Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。

MODE_WORLD_READABLE:表示当前文件可以被其他应用读取。

MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。

For example:

public void save(String fileName, String content, int mode) {

// 记住密码

try {

// 通过openFileputStream打开文件

FileOutputStream fos = context.openFileOutput(fileName, mode);

fos.write(content.getBytes());

fos.flush();

fos.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public String[] readFile(String fileName) {

String[] split = null;

File file = new File(context.getFilesDir(),fileName);

if (file.exists()) {

try {

// 根据文件创建出文件的输入流

InputStream is = new FileInputStream(file);

// 通过工具类读取文件的内容

String value = StreamTools.streamToStr(is);

// 按照分号进行拆分

split = value.split(";");

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

// 记得返回声明的对象

return split;

}

调用方法:internalStorage.save(fileName, content,Context.MODE_PRIVATE);

String values[] = internalStorage.readFile(fileName);

我们也可以将file文件保存到外部的存储设备中,如SDCrad:

在程序中访问SDCard,你需要申请访问SDCard的权限。

在AndroidManifest.xml中加入访问SDCard的权限如下:

<!-- 在SDCard中创建与删除文件权限 -->

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

<!-- 往SDCard写入数据权限 -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

通过方法调用的不同,存放路径可分公有文件和私密文件。公有文件可供所有人读写,但私密文件却只能够给自己看到。当应用被卸载时,公有文件依然会保留,而私密文件会随之被删除。

公有文件的方法:

For example:

public void save(String dir,String content,String fileName) {

//演示公共文件

File sdCardDir = Environment.getExternalStoragePublicDirectory(dir);



File file = new File(sdCardDir,fileName);

try {

FileOutputStream raf = new FileOutputStream(file);

raf.write(content.getBytes());

raf.flush();

raf.close();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public String[] readFile(String dir, String fileName) {

//声明返回值

String[] split = null;



File pdFile = new File(Environment.getExternalStoragePublicDirectory(dir), fileName);

if (pdFile.exists()) {

try {

// 根据文件创建出文件的输入流

InputStream is = new FileInputStream(pdFile);

// 通过工具类读取文件的内容

String value = StreamTools.streamToStr(is);

// 按照分号进行拆分

split = value.split(";");

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return split;

}

调用的方法:String values[] = internalStorage.readFile(Environment.DIRECTORY_DOWNLOADS,fileName);

internalStorage.save(Environment.DIRECTORY_DOWNLOADS,content,fileName);

私有文件的方法:

For example:

public void save(String dir,String content,String fileName) {

//演示公共文件

File sdCardDir = context.getExternalFilesDir(dir);



File file = new File(sdCardDir,fileName);

try {

FileOutputStream raf = new FileOutputStream(file);

raf.write(content.getBytes());

raf.flush();

raf.close();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public String[] readFile(String dir, String fileName) {

//声明返回值

String[] split = null;



File pdFile = new File(context.getExternalFilesDir(dir), fileName);

if (pdFile.exists()) {

try {

// 根据文件创建出文件的输入流

InputStream is = new FileInputStream(pdFile);

// 通过工具类读取文件的内容

String value = StreamTools.streamToStr(is);

// 按照分号进行拆分

split = value.split(";");

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return split;

}

调用的方法:String values[] = internalStorage.readFile(Environment.DIRECTORY_DOWNLOADS,fileName);

internalStorage.save(Environment.DIRECTORY_DOWNLOADS,content,fileName);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: