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

本文介绍了安卓应用如何进行文件读写,包括在手机内存和SD卡的操作。在手机内存中,应用的数据通常存储在'/data/data/包名/files'和'cache'文件夹,无须额外权限即可操作。通过ContextWrapper的API,可以方便地获取这两个路径进行读写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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



 
 
 
 
 
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值