Android 文件存储

在 raw 和 Assets 下存储

raw

raw 是 res 的子目录, 其创建流程为
此处输入图片的描述
新建一个 raw 目录,然后将要使用资源导入进去
此处输入图片的描述
其使用方法为如下所示

getResources().openRawResource(R.raw.lyric);

使用 raw 的好处可以直接 R.raw.lyric 的方式调用资源,包括在 XML 文件中,这样对开发者来说方便快捷。

Assets

Assets 是和 res 平级的目录, 其创建流程为
此处输入图片的描述

其目录如下图所示,将文件复制粘贴进去即可使用
此处输入图片的描述
其使用方法为

try {
    getResources().getAssets().open("lyric.lrc");
} catch (IOException e) {
    e.printStackTrace();
}

raw 和 Assets 这样一看好像没有什么不同
相比起 raw 是静态的, 可以直接通过使用 R.raw. 的方式调用,但是在 Assets 内部是支持动态创建文件夹,动态进行数据的读取的,这样一看又各有个的优势。

接下来来看下如何在内部直接创建文件夹


在手机内部操作文件

在手机的内存中操作文件

创建

//首先是文件的字节流
FileOutputStream fileOutputStream = openFileOutput("text.txt", Context.MODE_PRIVATE);
//然后再对字节流进行包装成字符流
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "UTF-8");
//用 editView 对字符流获取后写入
outputStreamWriter.write(editText.getText().toString());
//把缓冲区的数据强行输出, 避免还没有输出完就关闭了
outputStreamWriter.flush();
fileOutputStream.flush();
//注意关闭的顺序
//类似栈的结构,先打开的后关闭
outputStreamWriter.close();
fileOutputStream.close();

上述程序的作用是在包内部写入一个文件,假设文件存在,那么直接就覆盖了,方法都给封装好了

打开 DDMS 的 File Explorer 的 data 目录下找到我们的包,然后就可以看到我们的文件
此处输入图片的描述

新手第一次打开 DDMS 发现 File Explorer 是空的, 因为用的是模拟器,而有些模拟器镜像是没有存储的方法(始终觉得有只是不会…), 所以换了个模拟器就可以了

读出

//首先是文件读入应用的字节流
FileInputStream fileInputStream = openFileInput(fileName);
//将字节流包装成字符流
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
//再进行包装到缓冲区
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line = "";
String result = "";
//循环输出
while ((line = bufferedReader.readLine()) != null) {
    result = result + line + "\n";
}
tvShow.setText(result);
//按照类似栈的结构顺序关闭
bufferedReader.close();
inputStreamReader.close();
fileInputStream.close();

这里都是简单的 txt 文件的读取,而不同类型的文件有不同的读取的方式
关闭输入输出流的顺序大概就是这样,不同的人细节上处理的不同
如果误导了各位,还请批评指正

这样就可以从内部文件读出数据了
好开心


在 SD 卡操作文件

File sdcard = Environment.getExternalStorageDirectory();
//把 SD 卡的路径传入进去
File myFile = new File(sdcard, "test.txt");
//首先判断 SD 卡存不存在
if(!sdcard.exists()){
    return;
} else{
    try {
        myFile.createNewFile();
        FileOutputStream fileOutputStream = new FileOutputStream(myFile);
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
        outputStreamWriter.write(editText.getText().toString());
        outputStreamWriter.flush();
        fileOutputStream.flush();
        Toast.makeText(this, "写入完成", Toast.LENGTH_SHORT).show();
        outputStreamWriter.close();
        fileOutputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

而其他简单的操作和在手机前面在手机内部操作文件也是一样的

以下有两点要注意

  • 获取 SD卡 的路径
  • 在 Manifest 文件中配置权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

在 DDMS 的 File Explorer 的 storage 下的 sdcard 目录下找到我们的文件
此处输入图片的描述
在右上角红框处可以将文件导出

如果哪里有什么不对的还请给我留言O(∩_∩)O~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值