/********************************************************************************************
* author:conowen@大钟
* E-mail:conowen@hotmail.com
* http://blog.csdn.net/conowen
* 注:本文为原创,仅作为学习交流使用,转载请标明作者及出处。

********************************************************************************************/


Android数据存储

Android的文件数据存储方式有几种方式,如Shared Preferences、Network、SQlite、File……

而File存储又可以以存放的位置分为,存放于应用程序的私有文件夹和SDcard目录里面。

今天就简单说说Android应用程序对私有文件夹的读写操作。

私有文件的存储

一个应用程序的私有文件夹位于/data/data/"应用程序的包名"/files文件夹下面。打开eclipse的DDMS可以通过查看File Explorer找到文件。

创建之后用户具有读写的权限,默认情况下,该文件是不能被其他应用程序访问的,但是可以更改权限。应用程序安装之后,可在Android“设置”选项里面清除该应用程序的数据。通过openFileOutput(String filename,mode)和openFileInput(String filename) 可以得到一个文件流(FileOutputStream)或者(FileIutputStream), 然后调用文件流的write方法或者read方法就可以实现“写”和“读”功能 。


写操作

openFileOutput(String filename,mode)———— 打开应用程序私有目录下的的指定私有文件(String filename)写入数据,

返回一个FileOutputStream 对象,如果文件不存在就创建这个文件。

官方说明

Parameters
name The name of the file to open; can not contain path separators.
mode Operating mode. Use 0 or MODE_PRIVATE for the default operation,MODE_APPEND to append to an existing file,MODE_WORLD_READABLE andMODE_WORLD_WRITEABLE to control permissions.
Returns
  • FileOutputStream Resulting output stream.

常量 含义
MODE_PRIVATE 默认模式,值为0,文件只可以被调用该方法的应用程序访问

MODE_APPEND 如果文件已存在就向该文件的末尾继续写入数据,而不是覆盖原来的数据。(常用)

MODE_WORLD_READABLE 所有的应用程序都具有对该文件读的权限。

MODE_WORLD_WRITEABLE 所有的应用程序都具有对该文件写的权限。

写文件的简单过程

调用openFileOutput(String filename,mode)方法之后,会返回一个FileOutputStream对象。

然后调用FileOutputStream对象的write方法就可以写入文件了。

FileOutputStream.write(byte[] buffer) 虽然注意的是,write()方法写入的是byte[]类型,所以要通过

byte[] buffer = args.getBytes();
转换,把为string类型的args转换为byte[]类型。然后再写入。

其他操作方法:

读文件

openFileInput(String filename) 打开应用程序私有目录下的的指定私有文件以读入数据,返回一个FileInputStream 对象

列举文件

fileList() 搜索应用程序私有文件夹下的私有文件,返回所有文件名的String数组

删除文件

deleteFile(String fileName) 删除指定文件名的文件,成功返回true,失败返回false

具体用法还是看一下demo程序的代码,注释比较详细了

效果图


/*author:conowen * date:2012.2.27 */package com.conowen.privatefile;import java.io.FileInputStream;import java.io.FileOutputStream;import org.apache.http.util.EncodingUtils;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class PrivatefileActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);Button writebt = (Button) findViewById(R.id.write);Button readbt = (Button) findViewById(R.id.read);Button delbt = (Button) findViewById(R.id.del);writebt.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubEditText et = (EditText) findViewById(R.id.et);String etres = et.getText().toString();filewrite("test.data", etres);String[] filelist=fileList();//找出私有文件夹里面的文件,返回文件名Toast.makeText(PrivatefileActivity.this, "文件名是"+filelist[0],Toast.LENGTH_SHORT).show();}});readbt.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString result = "";result = fileread("test.data");Toast.makeText(PrivatefileActivity.this, result,Toast.LENGTH_SHORT).show();}});delbt.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubdelFile("test.data");}});}// 读public String fileread(String filename) {// 打开指定文件,读取其数据,返回字符串对象String res = "";// 初始化restry {FileInputStream fileread = openFileInput(filename);// 获取文件长度int lenght = fileread.available();byte[] buffer = new byte[lenght];fileread.read(buffer);// 将byte数组转换成指定编码格式的字符串res = EncodingUtils.getString(buffer, "UTF-8");// 文件编码} catch (Exception e) {e.printStackTrace();}return res;}// 删public boolean delFile(String filename) {try {boolean del = deleteFile(filename);return del;} catch (Exception e) {e.printStackTrace();}return false;}public void filewrite(String filename, String args) {// 写try {byte[] buffer = args.getBytes();// 将要写入的字符串转换为byte数组 ,args为方法传入的字符串FileOutputStream out = openFileOutput(filename, MODE_APPEND);// 获得FileOutputStreamout.write(buffer);// 将byte数组写入文件Log.i("i", "write");out.close();// 关闭文件输出流} catch (Exception e) {System.err.println("Error writing to file!");}}}

main.xml代码

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <TextView        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/hello" />    <EditText        android:id="@+id/et"        android:layout_width="fill_parent"        android:layout_height="wrap_content" />    <Button        android:id="@+id/write"        android:layout_width="80dip"        android:layout_height="wrap_content"        android:text="写" />    <Button        android:id="@+id/read"        android:layout_width="80dip"        android:layout_height="wrap_content"        android:text="读" />    <Button        android:id="@+id/del"        android:layout_width="80dip"        android:layout_height="wrap_content"        android:text="删" /></LinearLayout>




更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. 【Android】自动提示匹配之AutoCompleteTextView
  4. Android拍照、录像、录音代码范例
  5. Android评论留言页面
  6. Android读取SD卡下面所有的TXT文件名 listView显示出来
  7. Android(安卓)Camera框架分析
  8. Android引入外部字体源代码
  9. Android(安卓)学习记录-加载菜单

随机推荐

  1. Android要走路还很长
  2. android eclipse 真机调试
  3. 【摘录】android 屏幕分辨率问题
  4. Android内存管理机制之一:lowmemory kille
  5. 工作日志2015-3-20
  6. Android代码开发性能指引
  7. Android(安卓)activity intent 入门
  8. 什么是Android?
  9. Android(安卓)Framework启动流程浅析
  10. Android中使用Handler机制更新UI的三种解