部分参考自:http://www.cnblogs.com/feisky/archive/2011/01/05/1926177.html

Android中用文件如何对数据进行存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中
  // 创建的文件保存在/data/data/com.xzb.testfile/files/public void save() {try {FileOutputStream fos = MainActivity.this.openFileOutput("xzb_1.txt",MainActivity.this.MODE_WORLD_READABLE);fos.write("save: You have created successfully!".getBytes());fos.close();} catch (Exception e) {e.printStackTrace();}}

openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。创建的文件保存在/data/data/<package name>/files目录,如: /data/data/cn.itcast.action/files/itcast.txt ,通过点击Eclipse菜单“Window”-“Show View”-“Other”,在对话窗口中展开android文件夹,选择下面的File Explorer视图,然后在File Explorer视图中展开/data/data/<package name>/files目录就可以看到该文件。
openFileOutput()方法的第二参数用于指定操作模式,有四种模式,分别为: Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
如果希望文件被其他应用读和写,可以传入:
openFileOutput("itcast.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);

android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的(位于/data/data/<package name>/files),其他程序无法访问。除非在创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有这样其他程序才能正确访问。

读取文件内容:
public void load() {try {FileInputStream fis = this.openFileInput("xzb_1.txt");ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int length = -1;while ((length = fis.read(buffer)) != -1) {baos.write(buffer, 0, length);}baos.close();fis.close();Log.i(tag, "读出的文件内容为:" + baos.toString());} catch (Exception e) {e.printStackTrace();}}

对于私有文件只能被创建该文件的应用访问,如果希望文件能被其他应用读和写,可以在创建文件时,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。
Activity还提供了getCacheDir()和getFilesDir()方法:
getCacheDir()方法用于获取/data/data/<package name>/cache目录
getFilesDir()方法用于获取/data/data/<package name>/files目录


把文件放入SD卡



使用Activity的openFileOutput()方法保存文件,文件是存放在手机空间上,一般手机的存储空间不是很大,存放些小文件还行,如果要存放像视频这样的大文件,是不可行的。对于像视频这样的大文件,我们可以把它存放在SDCard。 SDCard是干什么的?你可以把它看作是移动硬盘或U盘。

在模拟器中使用SDCard,你需要先创建一张SDCard卡(当然不是真的SDCard,只是镜像文件)。创建SDCard可以在Eclipse创建模拟器时随同创建,也可以使用DOS命令进行创建,如下:

在Dos窗口中进入android SDK安装路径的tools目录,输入以下命令创建一张容量为2G的SDCard,文件后缀可以随便取,建议使用.img:

mksdcard 2048M D:\AndroidTool\sdcard.img

在程序中访问SDCard,你需要申请访问SDCard的权限。

在AndroidManifest.xml中加入访问SDCard的权限如下:

<!-- 在SDCard中创建与删除文件权限 -->

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

<!-- 往SDCard写入数据权限 -->

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



要往SDCard存放文件,程序必须先判断手机是否装有SDCard,并且可以进行读写。

注意:访问SDCard必须在AndroidManifest.xml中加入访问SDCard的权限

// 创建的文件保存在/mnt/media_rw/sdcard/public void writeSDFile(String fileName, String str_content) {Log.i(tag, "writeSDFile方法进入了---------------");try {if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {//获取SD卡目录File extDir = Environment.getExternalStorageDirectory();File file = new File(extDir, fileName);FileOutputStream fos = new FileOutputStream(file);byte[] bytes = str_content.getBytes();fos.write(bytes);Log.i(tag, "writeSDFile方法写字符了---------------");fos.close();}} catch (Exception e) { e.printStackTrace();}}


// 以文件的方式读SD卡中的文件
public String readSDFile(String fileName) {String result = "";try {//获取SD卡目录File extDir = Environment.getExternalStorageDirectory();File file = new File(extDir, fileName);FileInputStream fis = new FileInputStream(file);int length = fis.available();byte[] buffer = new byte[length];fis.read(buffer);result = EncodingUtils.getString(buffer, "utf-8");fis.close();} catch (Exception e) {e.printStackTrace();}return result;}


//读一个新建的文件
public void TestReadRawFile() {String result = "";try { // 得到资源中的Raw数据流InputStream is = getResources().openRawResource(R.raw.test_1);//文件位于res/raw/// 得到数据的大小int length = is.available();byte[] buffer = new byte[length];// 读取数据is.read(buffer);result = EncodingUtils.getString(buffer, "BIG5");// 关闭is.close();} catch (Exception e) { e.printStackTrace();}Log.i(tag, "以raw方式读到的字符串为:" + result);}




更多相关文章

  1. android edittext不弹出软键盘
  2. Android(安卓)systemserver 解析
  3. Android中向服务器上传图片
  4. Android(安卓)Android.mk 文件一点感悟
  5. Android中AIDL详解
  6. 浅谈Java中Collections.sort对List排序的两种方法
  7. NPM 和webpack 的基础使用
  8. Python list sort方法的具体使用
  9. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程

随机推荐

  1. 【JAVA】给大家推荐一道有意思的java测试
  2. ButterKnife--View注入框架
  3. Android添加一个新的按键Key
  4. android 网络定位失败 location为null的
  5. Android简单笔记本解析
  6. 反编译Android(安卓)apk文件
  7. Gradle build 报错:Received status code
  8. 如何编译Android内核
  9. android界面无标题和全屏效果实现方式
  10. android 通过adb命令控制wifi开关