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. Java常见异常

    1. runtimeException子类: 1. java.lang.ArrayIndexOutOfBoundsException    数组索引越界异常.当对数组的索引值为负数或大于等于数组大小时 ...

  2. maven-相关配置

    Linux Ubuntu 安装Maven 我配置了  sudo gedit /etc/profile 配置了vi .bashrc 这个文档比较好(参考文档:http://www.linuxidc.co ...

  3. POJ2186 Popular Cows

    Description Every cow's dream is to become the most popular cow in the herd. In a herd of N (1 <= ...

  4. JAVA敏捷开发环境搭建

    前面介绍了创业型软件公司的工作模式,这里详细介绍下如何实施,第一步是先要搭建环境,有了环境才能开展工作. 整个软件项目分为四个环境 开发本地环境.开发环境.测试环境.IDC环境.和传统C++开发不一样 ...

  5. App接口中xml方式封装通信接口

  6. memcache 开发版

    memcache安装,如果是用xampp,一定要下载开发版本 解压开发包,将其中的include目录复制到应用的lampp目录下 tar -zxvf xampp-linux-devel-1.7.2.t ...

  7. C# 获取文件MD5校验码

    using System; using System.IO; using System.Security.Cryptography; using System.Text; public class M ...

  8. WPF 组合快捷键

    if(e.KeyStates == Keyboard.GetKeyStates(Key.F4) && Keyboard.Modifiers == ModifierKeys.Alt) { ...

  9. IE input file隐藏不能上传文件解决方法

    当大神们都在探讨更深层次的问题时,我还在这里转载发些肤浅的问题解决方案.罢了,为了和我一样笨的后来人. 问题: 上传文件时,用<input type="file" /> ...

  10. malloc 函数到底做了什么?

    请看下面的代码. 猜测结果是什么?编译通过吗? #include <stdio.h> #include <stdlib.h> int main() { ; char *ptr ...