Android学习笔记(4)————Android的私人文件夹的文件读写操作

********************************************************************************************
 * 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
nameThe name of the file to open; can not contain path separators.
modeOperating 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[]类型,所以要通过

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

其他操作方法:

读文件

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

列举文件             

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

删除文件

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

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

效果图


[java]  view plain copy
  1. /*author:conowen 
  2.  * date:2012.2.27 
  3.  */  
  4. package com.conowen.privatefile;  
  5.   
  6. import java.io.FileInputStream;  
  7. import java.io.FileOutputStream;  
  8.   
  9. import org.apache.http.util.EncodingUtils;  
  10.   
  11. import android.app.Activity;  
  12. import android.os.Bundle;  
  13. import android.util.Log;  
  14. import android.view.View;  
  15. import android.view.View.OnClickListener;  
  16. import android.widget.Button;  
  17. import android.widget.EditText;  
  18. import android.widget.Toast;  
  19.   
  20. public class PrivatefileActivity extends Activity {  
  21.     /** Called when the activity is first created. */  
  22.     @Override  
  23.     public void onCreate(Bundle savedInstanceState) {  
  24.         super.onCreate(savedInstanceState);  
  25.         setContentView(R.layout.main);  
  26.         Button writebt = (Button) findViewById(R.id.write);  
  27.         Button readbt = (Button) findViewById(R.id.read);  
  28.         Button delbt = (Button) findViewById(R.id.del);  
  29.       
  30.                   
  31.         writebt.setOnClickListener(new OnClickListener() {  
  32.   
  33.             @Override  
  34.             public void onClick(View v) {  
  35.                 // TODO Auto-generated method stub  
  36.                 EditText et = (EditText) findViewById(R.id.et);  
  37.                 String etres = et.getText().toString();  
  38.                 filewrite("test.data", etres);  
  39.                 String[] filelist=fileList();//找出私有文件夹里面的文件,返回文件名  
  40.                   
  41.                 Toast.makeText(PrivatefileActivity.this"文件名是"+filelist[0],Toast.LENGTH_SHORT).show();  
  42.             }  
  43.         });  
  44.         readbt.setOnClickListener(new OnClickListener() {  
  45.   
  46.             @Override  
  47.             public void onClick(View v) {  
  48.                 // TODO Auto-generated method stub  
  49.                 String result = "";  
  50.                 result = fileread("test.data");  
  51.                 Toast.makeText(PrivatefileActivity.this, result,  
  52.                         Toast.LENGTH_SHORT).show();  
  53.             }  
  54.         });  
  55.         delbt.setOnClickListener(new OnClickListener() {  
  56.   
  57.             @Override  
  58.             public void onClick(View v) {  
  59.                 // TODO Auto-generated method stub  
  60.                 delFile("test.data");  
  61.             }  
  62.         });  
  63.   
  64.     }  
  65.   
  66.     // 读  
  67.     public String fileread(String filename) {  
  68.         // 打开指定文件,读取其数据,返回字符串对象  
  69.         String res = "";// 初始化res  
  70.         try {  
  71.             FileInputStream fileread = openFileInput(filename);  
  72.             // 获取文件长度  
  73.             int lenght = fileread.available();  
  74.             byte[] buffer = new byte[lenght];  
  75.             fileread.read(buffer);  
  76.             // 将byte数组转换成指定编码格式的字符串  
  77.             res = EncodingUtils.getString(buffer, "UTF-8");// 文件编码  
  78.         } catch (Exception e) {  
  79.             e.printStackTrace();  
  80.         }  
  81.   
  82.         return res;  
  83.     }  
  84.   
  85.     // 删  
  86.     public boolean delFile(String filename) {  
  87.   
  88.         try {  
  89.             boolean del = deleteFile(filename);  
  90.             return del;  
  91.         } catch (Exception e) {  
  92.             e.printStackTrace();  
  93.         }  
  94.         return false;  
  95.   
  96.     }  
  97.   
  98.     public void filewrite(String filename, String args) {  
  99.         // 写  
  100.         try {  
  101.             byte[] buffer = args.getBytes();  
  102.             // 将要写入的字符串转换为byte数组 ,args为方法传入的字符串  
  103.             FileOutputStream out = openFileOutput(filename, MODE_APPEND);  
  104.             // 获得FileOutputStream  
  105.             out.write(buffer);// 将byte数组写入文件  
  106.             Log.i("i""write");  
  107.             out.close();// 关闭文件输出流  
  108.         } catch (Exception e) {  
  109.             System.err.println("Error writing to file!");  
  110.         }  
  111.     }  
  112. }  

main.xml代码

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <TextView  
  8.         android:layout_width="fill_parent"  
  9.         android:layout_height="wrap_content"  
  10.         android:text="@string/hello" />  
  11.   
  12.     <EditText  
  13.         android:id="@+id/et"  
  14.         android:layout_width="fill_parent"  
  15.         android:layout_height="wrap_content" />  
  16.   
  17.     <Button  
  18.         android:id="@+id/write"  
  19.         android:layout_width="80dip"  
  20.         android:layout_height="wrap_content"  
  21.         android:text="写" />  
  22.   
  23.     <Button  
  24.         android:id="@+id/read"  
  25.         android:layout_width="80dip"  
  26.         android:layout_height="wrap_content"  
  27.         android:text="读" />  
  28.   
  29.   
  30.     <Button  
  31.         android:id="@+id/del"  
  32.         android:layout_width="80dip"  
  33.         android:layout_height="wrap_content"  
  34.         android:text="删" />  
  35.   
  36. </LinearLayout>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值