注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

无线时代辐射无穷

抓紧生宝宝,小心辐射

 
 
 

日志

 
 

android中数据文件读写保存方式  

2011-06-22 14:02:14|  分类: android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一、采用属性properties文件操作,比较方便

Properties(属性),可以把Properties继承自Hashtable,理解成一个Hashtable ,不过唯一不同的是,Properties对应的“键-值”必须是字符串形式的数据类型。Files 数据存储主要是使用 Properties 配合 FileInputStream或者FileOutputStream对文件写入操作。

代码
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.getId()==btnlogin.getId()){
Properties properties
=new Properties();
String name
=etname.getText().toString();
String pwd
=etpwd.getText().toString();
try {
// 文件创建模式:MODE_APPEND
// 如果该文件已经存在,然后将数据写入,而不是抹掉它现有文件的末尾。
// 文件创建模式:MODE_PRIVATE
// 默认模式,在那里创建的文件只能由应用程序调用,即为私有的
// 文件创建模式:MODE_WORLD_READABLE
// 允许所有其他应用程序有读取和创建文件的权限。
// 文件创建模式:MODE_WORLD_WRITEABLE
// 允许所有其他应用程序具有写入、访问和创建的文件权限。
FileOutputStream out=this.openFileOutput("login.cfg",Context.MODE_PRIVATE);
properties.put(
"name", name);
properties.put(
"pwd", pwd);
try {
properties.store(
out, "");
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else{
loadInfo();
}
}

//保存文件
public void loadInfo(){
Properties properties
=new Properties();
try {
FileInputStream
in=this.openFileInput("login.cfg");
try {
properties.load(
in);
String name
=properties.get("name").toString()+"///";
String pwd
=properties.get("pwd").toString()+"///";
this.etname.setText(name);
this.etpwd.setText(pwd);
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

 二、一般文件的文本或二进制读写操作,包括访问sd卡

下面我们来实现如何在android中实现对文件的读写。在手机系统中,我们对文件读写有两个位置。一个是手机自带的存储还有就是sd卡。就像我们电脑硬盘和外接存储设备一样。android 为我们提供了简单的打开输入和输出流的操作。openFileOutput和openFileInput方法。下面的代码,有一部位是写入一部分是读出。不可以直接运行的代码

  1. package org.skycn.InOutFile;  
  2. import java.io.ByteArrayOutputStream;  
  3. import java.io.FileInputStream;  
  4. import java.io.FileNotFoundException;  
  5. import java.io.FileOutputStream;  
  6. import android.app.Activity;  
  7. import android.os.Bundle;  
  8. import android.view.View;  
  9. import android.widget.Button;  
  10. import android.widget.TextView;  
  11. import android.widget.Toast;  
  12. public class MainActivity extends Activity {  
  13.     private TextView fileNameText;  
  14.     private TextView fileContentText;  
  15.     @Override  
  16.     public void onCreate(Bundle savedInstanceState) {  
  17.         super.onCreate(savedInstanceState);  
  18.         setContentView(R.layout.main);  
  19.         fileNameText = (TextView) findViewById(R.id.fileName);  
  20.         fileNameText.setText("tianzhw.txt");  
  21.         fileContentText = (TextView) findViewById(R.id.fileContent);  
  22.         String str = new Read().readFile();  
  23.         if(str != null)  
  24.         {  
  25.             fileContentText.setText(str);  
  26.         }  
  27.         Button button = (Button) findViewById(R.id.button);  
  28.         button.setOnClickListener(new View.OnClickListener() {  
  29.             @SuppressWarnings("static-access")  
  30.             public void onClick(View v) {  
  31.                 // TODO Auto-generated method stub  
  32.                 String fileName = fileNameText.getText().toString();  
  33.                 String fileContent = fileContentText.getText().toString();  
  34.                   
  35.                 try {  
  36.                     FileOutputStream fos = openFileOutput(fileName, getApplicationContext().MODE_PRIVATE);  
  37.                     fos.write(fileContent.getBytes());  
  38.                     fos.close();  
  39.                     Toast.makeText(getApplicationContext(), R.string.sueecc, 1).show();  
  40.                 } catch (Exception e) {  
  41.                     // TODO Auto-generated catch block  
  42.                     e.printStackTrace();  
  43.                 }  
  44.                   
  45.             }  
  46.         });  
  47.           
  48.               
  49.     }  
  50.       
  51.     @SuppressWarnings("unused")  
  52.     private final class Read{     
  53.         public String readFile()  
  54.         {  
  55.             try {  
  56.                 ByteArrayOutputStream byteArray = new ByteArrayOutputStream();  
  57.                 byte[] bys= new byte[1024];  
  58.                 FileInputStream fis = openFileInput("tianzhw.txt");  
  59.                 int len;  
  60.                 while((len = fis.read(bys))!=-1){  
  61.                     byteArray.write(bys, 0, len);  
  62.                 }  
  63.                 return new String(byteArray.toByteArray());           
  64.             } catch (Exception e) {  
  65.                 // TODO Auto-generated catch block  
  66.                 e.printStackTrace();  
  67.             }  
  68.             return null;  
  69.         }  
  70.     }  
  71. }  

 

通过上面的代码,我们创建的文件会被保存到手机的自带存储中路径为/data/data/<包>/files下面

Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLEContext.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 ,只有这样其他程序才能正确访问。
  评论这张
 
阅读(2457)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017