Android开发离不开对文件的操作,前面的文章“Android简易数据存储之SharedPreferences”和“Android数据存储之SQLite的操作”,分别讲解了简单的数据的存储和数据库数据的操作。然而,前面的两篇文章都未涉及具体文件的操作。下面来看下Android是怎么操作其内置目录文件及外部sdcard数据的。

  环境:Android studio、海马玩模拟器

  资源文件:

    /assets目录下test.txt

aaaaaaaaaaaaaa
bbbbbbb

    /res/raw(需要手工创建)目录下rawfile.txt

raw file
ddddddddddd
eeeeeeeeee
ffffffffff

  一、读取assets目录下的文件

            //读写assets目录下的文件
InputStream is = getResources().getAssets().open("test.txt");
Reader in = new InputStreamReader(is);
BufferedReader bufferedReader = new BufferedReader(in);
String line = null;
while (null != (line = bufferedReader.readLine()) ){
System.out.println("assets file==========" + line);
}
bufferedReader.close();
in.close();
is.close();

  由于assets下的文件不会再R.java中生成相应的ID,因此Android提供了AssetManager的方法访问assets下的资源。

  二、读取raw目录下的文件

            //读取raw目录下的文件,raw位于res目录下,需要手工创建
is = getResources().openRawResource(R.raw.rawfile);
in = new InputStreamReader(is);
bufferedReader = new BufferedReader(in);
line = null;
while (null != (line = bufferedReader.readLine()) ){
System.out.println("rawfile==========" + line);
}
bufferedReader.close();
in.close();
is.close();

  三、读写工程内部文件

           //读写工程内部文件
FileOutputStream fileOutputStream = openFileOutput("projectfile.txt", Context.MODE_PRIVATE);
OutputStreamWriter osw = new OutputStreamWriter(fileOutputStream);
BufferedWriter bw = new BufferedWriter(osw);
bw.write("ooooooooooooooooooo");
bw.close();
osw.close();
fileOutputStream.close(); FileInputStream fileInputStream = openFileInput("projectfile.txt");
InputStreamReader isr = new InputStreamReader(fileInputStream);
char[] input = new char[fileInputStream.available()];
isr.read(input);
isr.close();
fileInputStream.close();
String str = new String(input);
System.out.println("project file=============" + str);

  四、读写sdcard文件

  1、AndroidManifest.xml中添加权限控制

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

  2、读写sdcard文件

            //读写sdcard,需要在AndroidManifest.xml中添加权限说明
//<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
File file = Environment.getExternalStorageDirectory();//获取sdcard路径
if(file.exists()){//判断是否存在sdcard
System.out.println("sdcard file path========" + file.getAbsolutePath());
File myfile = new File(file, "myfile_sdcard.txt");
myfile.createNewFile();
FileOutputStream fos = new FileOutputStream(myfile);
fos.write("AAAAAAAAAAa".getBytes());
fos.flush();
fos.close();
} //读取sdcard文件
File file1 = new File(file, "myfile_sdcard.txt");
InputStream inputStream = new FileInputStream(file1);
Reader reader = new InputStreamReader(inputStream);
BufferedReader bufferedReader1 = new BufferedReader(reader);
String iline = null;
while(null != (iline = bufferedReader1.readLine())){
System.out.println("from sdcard myfile_sdcard.txt============" + iline);
}
bufferedReader1.close();
reader.close();
inputStream.close();

  五、将APP运行到模拟器中,此时可以看到如下的输出结果

09-13 09:44:57.520    2243-2243/com.example.ibm.dataoperate I/System.out﹕ assets file==========aaaaaaaaaaaaaa
09-13 09:44:57.524 2243-2243/com.example.ibm.dataoperate I/System.out﹕ assets file==========bbbbbbb
09-13 09:44:57.528 2243-2243/com.example.ibm.dataoperate I/System.out﹕ rawfile==========raw file
09-13 09:44:57.528 2243-2243/com.example.ibm.dataoperate I/System.out﹕ rawfile==========ddddddddddd
09-13 09:44:57.532 2243-2243/com.example.ibm.dataoperate I/System.out﹕ rawfile==========eeeeeeeeee
09-13 09:44:57.532 2243-2243/com.example.ibm.dataoperate I/System.out﹕ rawfile==========ffffffffff
09-13 09:44:57.544 2243-2243/com.example.ibm.dataoperate I/System.out﹕ project file=============ooooooooooooooooooo
09-13 09:44:57.552 2243-2243/com.example.ibm.dataoperate I/System.out﹕ sdcard file path========/mnt/sdcard
09-13 09:44:57.556 2243-2243/com.example.ibm.dataoperate I/System.out﹕ from sdcard myfile_sdcard.txt============AAAAAAAAAAa

  上述四种操作Android文件的方式,各个处理方式都有所不同。

    1、读取assets目录下的资源文件时需要通过getResources().getAssets()方法获取AssetManager的open方法来进行处理;

    2、而读取raw目录下的资源文件则通过getResources().openRawResource(R.raw.资源名称)的方式来获取;

    3、读写工程其他目录的文件则通过openFileOutput和openFileInput来进行处理;

    4、最后sdcard文件的操作需要额外在AndroidManifest.xml中进行权限的声明,并通过Environment.getExternalStorageDirectory()获取sdcard的路径,剩下的就是Java对文件的操作了。

Android读写assets、raw、sdard和工程文件的方法的更多相关文章

  1. android 打开 res raw目录 中 数据库文件

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 安卓不能直接打开 res raw 中的 数据库 文件. 通过 资源 获取资源 方法 , ...

  2. 【Xcode 4 无法打开 Xcode 5 DP 打开过的工程文件 解决方法】

    试用Xcode 5 DP打开现有工程文件后再用Xcode4打开后 Xcode 4 会进入崩溃模式折腾了几次发现下面的方法可以让工程文件恢复 如果在Xcode5-DP中打开过xib文件需要在侧栏中修改I ...

  3. android 从assets和res中读取文件

    1. 相关文件夹介绍 在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的.assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件被预编译, ...

  4. android 从assets和res中读取文件(转)

    1. 相关文件夹介绍      在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的.assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件 ...

  5. Android 的assets文件资源与raw文件资源读取

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zpf8861/article/details/34504183   res/raw和assets的同 ...

  6. Android(java)学习笔记135:Android中assets文件夹资源的访问

    Android资源文件分类: Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.java里面自动生成该资源文件的ID,所以访问这种资源文件 ...

  7. Android 读取Assets下的资源文件

    做Android开发近半年了,东西越学越多,硬盘容量越来越小.很多东西找起来也不方便,为此,我打算从今天起把工作中学到的东西整理起来,写成日记.也希望与广大网友分享我的经验.一同进步.今天主要介绍文件 ...

  8. Android(java)学习笔记77:Android中assets文件夹资源的访问

    Android资源文件分类: Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.java里面自动生成该资源文件的ID,所以访问这种资源文件 ...

  9. Android从assets目录下读取文件相关

    有一个需求是app的帮助文档是word格式,ios可以直接用webview加载word显示,Android不行.而美工不配合转换成图片,前端没时间把word写成html 没办法,自己搞. 步骤: 1. ...

随机推荐

  1. Learn sed using these command on Linux(流线式编辑器——sed)

    是对文件中的每一行进行处理,不会对源文件进行修改 sed --version sed '11d' sed_file sed -n '/[Bb]erry/p' sed_file (由于设置了n,所以只打 ...

  2. tarjan算法--求无向图的割点和桥

    一.基本概念 1.桥:是存在于无向图中的这样的一条边,如果去掉这一条边,那么整张无向图会分为两部分,这样的一条边称为桥无向连通图中,如果删除某边后,图变成不连通,则称该边为桥. 2.割点:无向连通图中 ...

  3. 【Matplotlib】 移动spines

    相关文档: Spines Axis container Transformations tutorial Spines 是连接轴刻度标记的线,而且标明了数据区域的边界. 他们可以被放置在任意位置.直到 ...

  4. 基于SVD的推荐算法

    首先每行减去每列的均值,然后svd分解,得到USV,然后US代表用户矩阵u,SV代表项目矩阵v,那么预测评分为用户均值加上uv. 降维方法扩展性好,不过降维导致信息损失,而且与数据及相关,高维情况下效 ...

  5. poj 3311 tsp入门

    题意:n+1个点:0--n,找一条路径从0点出发遍历1--n的点再回到0,每个点可经过不止一次,求最短路径 裸的TSP问题,先用Floyd求出各个点之间最短路,再状压dp即可 用n+1位二进制表示状态 ...

  6. Sublime text 快捷键总结

    下述快捷键都是我写C++代码时发现的,是否适用其他格式(扩展名)的文件尚为未知. Basic Editing Ctrl + A 全选 Ctrl + S 保存 Ctrl + C 复制 Ctrl + V ...

  7. 使用multi curl进行http并发访问

    curl是一款利用URL语法进行文件传输的工具,它支持多种协议,包括FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET等,我们既可以在命令行上使用它,也可以利用 libcur ...

  8. nginx+php出现502 不能解析

    到php-fpm下面查看配置文件看引用的文件,找到listening 在nginx里面配置为sock方式

  9. Applying Eigenvalues to the Fibonacci Problem

    http://scottsievert.github.io/blog/2015/01/31/the-mysterious-eigenvalue/ The Fibonacci problem is a ...

  10. 回顾bidirectional path tracing

    最近因为研究需要,回顾了一下BDPT,主要看VEACH的那篇论文,同时参考了pbrt,mitsuba的实现,自己写了一份新的bdpt实现.以前实现的那一份BDPT不是基于物理的,而且无法处理镜面和透明 ...