一、保存文件到手机内存
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/** * 保存数据到手机rom的文件里面. * @param context 应用程序的上下文 提供环境 * @param name 用户名 * @param password 密码 * @throws exception */ public static void savetorom(context context, string name , string password) throws exception{ //file file = new file("/data/data/com.itheima.login/files/info.txt"); file file = new file(context.getfilesdir(), "info.txt" ); //该文件在data下的files文件夹下getcachedir()在cache文件夹下 文件大小不要超过1mb fileoutputstream fos = new fileoutputstream(file); string txt = name+ ":" +password; fos.write(txt.getbytes()); fos.flush(); fos.close(); } |
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
|
/** * 获取保存的数据 * @param context * @return */ public static map<string,string> getuserinfo(context context) { file file = new file(context.getfilesdir(), "info.txt" ); try { fileinputstream fis = new fileinputstream(file); //也可直接读取文件string result = streamtools.readfromstream(fis); bufferedreader br = new bufferedreader( new inputstreamreader(fis)); string str = br.readline(); string[] infos = str.split( ":" ); map<string,string> map = new hashmap<string, string>(); map.put( "username" , infos[ 0 ]); map.put( "password" , infos[ 1 ]); return map; } catch (exception e) { e.printstacktrace(); return null ; } } //最后可以直接调用上面的方法读取信息 map<string, string> map = getuserinfo( this ); if (map!= null ){ textview.settext(map.get(“username”)); } |
二、保存文件到sd卡
获取手机sd空间的大小:
1
2
3
4
5
6
7
8
9
10
11
|
file path = environment.getexternalstoragedirectory(); statfs stat = new statfs(path.getpath()); long blocksize = stat.getblocksize(); long totalblocks = stat.getblockcount(); long availableblocks = stat.getavailableblocks(); long totalsize = blocksize*totalblocks; long availsize = blocksize * availableblocks; string totalstr = formatter.formatfilesize( this ,totalsize); string availstr = formatter.formatfilesize( this , availsize); tv.settext( "总空间" +totalstr+ "\n" + "可用空间" +availstr); |
加入写外部存储的权限:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<uses-permission android:name= "android.permission.write_external_storage" /> public static void save(string name ,string password) throws exception{ if (environment.getexternalstoragestate().equals(environment.media_mounted)){ file file = new file(environment.getexternalstoragedirectory(), "info.txt" ); //也可直接写/sdcard/info.txt 先判断sd卡是否存在 fileoutputstream fos = new fileoutputstream(file); string txt = name+ ":" +password; fos.write(txt.getbytes()); fos.flush(); fos.close(); // 使用randomaccessfile像文件追加内容fileoutputstream会把原有的文件内容清空 //randomaccessfile raf = new randomaccessfile(file,"rw"); //raf.seek(file.length()); 将文件指针移动到最后 //raf.write(name.getbytes()+password.getbytes()); //raf.close(); } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
//读取文件 加入读取权限 public static string read(){ try { if (environment.getexternalstoragestate().equals(environment.media_mounted)){ file sdcarddir = environment.getexternalstoragedirectory(); fileinputstream fis = new fileinputstream(sdcarddir.getcanonicalpath() + "info.txt" ); bufferedreader br = new bufferedreader( new inputstreamreader(fis)); stringbuilder sb = new stringbuilder( "" ); string line = null ; while ((line = br.readline())!= null ){ sb.append(line); } return sb.tostring(); } } catch (exception e) { e.printstacktrace(); } return null ; } |
三、sharedpreferences的使用
sharedpreference是开发中常用的一种存储方式,主要存储一些系统不变的参数如是否是第一次进入应用程序等,通过键值对的方式进行存储
可以存储的类型:booleans, floats, ints, longs,strings.
getsharedpreferences() - 存储多个参数
getpreferences() - 仅存储一个参数并且不需要指定名字(key)
写入的步骤:
sharedpreferences调用edit()得到一个editor对象
使用 putboolean() and putstring()添加值
提交事务完成存储
读取时:只需要调用sharedpreferences的getboolean() and getstring()
下面是示例代码:
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
|
public class mysharedpreference { private context context; private sharedpreferences sp ; private editor edit; public mysharedpreference(context context){ this .context = context; } public boolean savemessage(string name,string pwd){ boolean flag = false ; sp = context.getsharedpreferences( "userinfo" ,context.mode_private); //mode定义了访问的权限现在是本应用可以访问 edit = sp.edit(); edit.putstring( "name" , name); edit.putstring( "pwd" , pwd); flag = edit.commit(); //提交事务将数据持久化到存储器中 return flag; } public map<string,object> getmessage(){ map<string,object> map = new hashmap<string, object>(); sp = context.getsharedpreferences( "userinfo" , context.mode_private); string name = sp.getstring( "name" , "" ); string pwd = sp.getstring( "pwd" , "" ); map.put( "name" , name); map.put( "pwd" ,pwd); return map; } } |