安卓写入文件读取文件初步

来源:互联网 发布:python 爬虫框架 编辑:程序博客网 时间:2024/06/05 13:47

首先分为两大部分: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文件里