首先分为两大部分:1.写入手机内存 2.写入sd卡
1.第三方安卓程序都安装在"/data/data/包名"目录下该目录下有files文件夹,和chche文件夹
files文件夹用来盛装应用的数据,在系统中叫做应用的数据,”/data/data/包名“是应用自己的空间,
不需要权限就可以操作此文件夹的内容,
cache文件夹是应用的缓存,一些清理软件可以清除掉软件的cache文件夹的内容
2.在程序中读写“/data/data/包名”文件夹的内容
1.写入内容
String path="/data/data/包名/files/myfile.txt";
File file=new File(path);
try {
FileOutputStream fos=new FileOutputStream(file,true);
fos.write("我是将要写入文件的数据".getBytes());
fos.flush();
} catch (IOException e) {
e.printStackTrace();
}
我们将一行字写入files文件夹下的file.txt文件下
其中数据部分所占的空间就是我们在files文件夹下写的文件
缓存所占的大小就是我们在cache文件夹下文件所占的大小,我这里files文件夹下没有文件
2.读取文件同理,就是简单的io读写
String path="/data/data/包名/files/myfile.txt";
File file=new File(path);
try {
String str="";
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(file)));
str=br.readLine();
System.out.println(str);
} catch (IOException e) {
e.printStackTrace();
}
3.可是我们的包名可能会被改变,所以这里我们不能写死了
安卓为我们提供了如何自动获得这两个路径的方法,activity父类的父类android.content.ContextWrapper身上有两个方法
分别获得chche的路径 “/data/data/包名/cache”和"/data/data/包名/files"
这样我们就可以在activity中获得路径操作他们了
4.由于对应用程序包所关联的私有文件夹 也就是我们的/data/data/包名/files的读写非常常用,安卓也提供了另外两个方法
FileOutputStream openFileOutput (String name, int mode)
比如我们的name参数是"a.txt"那么 程序将会打开通向"/data/data/包名/files/a.txt"的输出流
mode 取值0或者MODE_PRIVTE 代表默认设置,文件时私有的其他程序不能读写
MODE_APPEND
追加到现有的文件。
MODE_ENABLE_WRITE_AHEAD_LOGGING
MODE_NO_LOCALIZED_COLLATORS
这两个不知道什么意思,但不能续写文件
*/-----------------------------------------------------------/*
读取写入sd卡的内容,
1.读取sd卡
sd卡的路径是mnt/sdcard/有时候是 mnt/sdcard1,或者storage/emulated/0,总之不固定
安卓中同样给出了获得sd卡路径的方法我们用Environment对象获得sd卡的路径
Enviroment对象的一些get方法
getDataDirectory() /data 获得data目录
getDownloadCacheDirectory() /cache 获得cacae目录
getExternalStorageDirectory() /strorage/emulated/0获得sd卡目录
getExternalStorageState(File path)
getRootDirectory() /system 也就是system的目
getExternalStorageState() mounted 获得sd卡的状态在
getStorageState(File path) 获取sd卡的状态 ,在api21中被弃用用上面那个代替
2.可以获得路径了,我们要写入文件之前要先检测内存卡的状态,也就是getExternalStorageState() ,,返回值是
MEDIA_UNKNOWN,MEDIA_REMOVED, MEDIA_UNMOUNTED,MEDIA_CHECKING, MEDIA_NOFS,MEDIA_MOUNTED,
MEDIA_MOUNTED_READ_ONLY,MEDIA_SHARED, MEDIA_BAD_REMOVAL,MEDIA_UNMOUNTABLE 之一
mounted是挂载的意思,表示可用
3.添加sd卡读取权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
4.SharedPreferences的使用
*获取SharedPreferences对象(两个参数,一个是文件名,一个是文件权限)
*sp.edit()获取edit对象
*edit对象调用putString("name","value");记住要edit.commit()提交才能保存
*用sp的getString("name","默认值");返回获得的值,如果没有就返回默认值
SharedPreferences以xml的形式存储在/data/data/包名/shared_prefs/xxx.xml文件里