在 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~~