服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - 实例详解Android文件存储数据方式

实例详解Android文件存储数据方式

2021-05-08 18:03Snail Android

总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络。下面通过本文给大家介绍Android文件存储数据方式,对android文件存储数据相关知识感兴趣的朋友一起学习吧

总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络。下面通过本文给大家介绍android文件存储数据方式。

1.文件存储数据使用了java中的io操作来进行文件的保存和读取,只不过android在context类中封装好了输入流和输出流的获取方法。

创建的存储文件保存在/data/data/<package name>/files文件夹下。

实例详解Android文件存储数据方式

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/**
* mainactivity
*
* @author zuolongsnail
*
*/
public class mainactivity extends activity {
private edittext writeet;
private button writebtn;
private textview contentview;
public static final string filename = "setting.set";
@override
public void oncreate(bundle savedinstancestate) {
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(new operateonclicklistener());
}
class operateonclicklistener implements onclicklistener {
@override
public void onclick(view v) {
writefiles(writeet.gettext().tostring());
contentview.settext(readfiles());
system.out.println(getfilesdir());
}
}
// 保存文件内容
private void writefiles(string content) {
try {
// 打开文件获取输出流,文件不存在则自动创建
fileoutputstream fos = openfileoutput(filename,
context.mode_private);
fos.write(content.getbytes());
fos.close();
} catch (exception e) {
e.printstacktrace();
}
}
// 读取文件内容
private string readfiles() {
string content = null;
try {
fileinputstream fis = openfileinput(filename);
bytearrayoutputstream baos = new bytearrayoutputstream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
content = baos.tostring();
fis.close();
baos.close();
} catch (exception e) {
e.printstacktrace();
}
return content;
}
}

程序截图:

实例详解Android文件存储数据方式

提供一个文件存储数据的工具类:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/**
* 文件存储数据方式工具类
*
* @author zuolongsnail
*/
public class filesutil {
/**
* 保存文件内容
*
* @param c
* @param filename
* 文件名称
* @param content
* 内容
*/
private void writefiles(context c, string filename, string content, int mode)
throws exception {
// 打开文件获取输出流,文件不存在则自动创建
fileoutputstream fos = c.openfileoutput(filename, mode);
fos.write(content.getbytes());
fos.close();
}
/**
* 读取文件内容
*
* @param c
* @param filename
* 文件名称
* @return 返回文件内容
*/
private string readfiles(context c, string filename) throws exception {
bytearrayoutputstream baos = new bytearrayoutputstream();
fileinputstream fis = c.openfileinput(filename);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
string content = baos.tostring();
fis.close();
baos.close();
return content;
}
}

以上通过实例详解android文件存储数据方式,希望对大家今后的工作学习有所帮助。

延伸 · 阅读

精彩推荐