当前位置: 移动技术网 > IT编程>移动开发>Android > Android使用文件进行数据存储的方法

Android使用文件进行数据存储的方法

2019年07月24日  | 移动技术网IT编程  | 我要评论

pinterest网站,唔唔好热好大不要教官,庸人自扰之的意思

本文实例讲述了android使用文件进行数据存储的方法。分享给大家供大家参考。具体如下:

很多时候我们开发的软件需要对处理后的数据进行存储,以供再次访问。android为数据存储提供了如下几种方式:

文件

sharedpreferences(参数)
sqlite数据库
内容提供者(content provider)

网络

首先给大家介绍使用文件如何对数据进行存储

activity提供了openfileoutput()方法可以用于把数据输出到文件中,具体的实现过程与在j2se环境中保存数据到文件中是一样的

public class fileactivity extends activity {
 @override
 public void oncreate(bundle savedinstancestate) {  
   fileoutputstream outstream = this.openfileoutput("ljq.txt", context.mode_private);
   outstream.write("我叫林计钦".getbytes());
   outstream.close(); 
 }
} 

openfileoutput(filename, mode)方法详解:

第一参数:

用于指定文件名称,不能包含路径分隔符“/”。如果文件不存在,android 会自动创建它。创建的文件保存在/data/data/<packagename>/files目录,如:/data/data/com.ljq.activity/files/itcast.txt ,通过点击myeclipse菜单“window”-“show view”-“other”,
在对话窗口中展开android文件夹,选择下面的file explorer视图,然后在file explorer视图中展开/data/data/<package name>/files目录就可以看到该文件

第二参数:

用于指定操作模式,有四种模式
context.mode_private  = 0
默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。
可以使用context.mode_append。
context.mode_append  = 32768
检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
context.mode_world_readable = 1
表示当前文件可以被其他应用读取
context.mode_world_writeable = 2
表示当前文件可以被其他应用写入

注意:

context.mode_world_readable和context.mode_world_writeable用来控制其他应用是否有权限读写该文件。
如果希望文件被其他应用读和写,可以传入: openfileoutput("ljq.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 ,只有这样其他程序才能正确访问。
如果要打开存放在/data/data/<package name>/files目录应用私有的文件,可以使用activity提供openfileinput()方法。
fileinputstream instream = this.getcontext().openfileinput("ljq.txt");
或者直接使用文件的绝对路径:
file file = new file("/data/data/com.ljq.action/files/ljq.txt");
fileinputstream instream = new fileinputstream(file);
注意:上面文件路径中的“com.ljq.action”为应用所在包,当你在编写代码时应替换为你自己应用使用的包。
对于私有文件只能被创建该文件的应用访问,如果希望文件能被其他应用读和写,可以在创建文件时,
指定context.mode_world_readable和context.mode_world_writeable权限。
activity还提供了getcachedir()和getfilesdir()方法:
getcachedir()方法用于获取/data/data/<package name>/cache目录
getfilesdir()方法用于获取/data/data/<package name>/files目录

案例

fileservice类:文件存取操作类

package com.ljq.service;
import java.io.bytearrayoutputstream;
import java.io.inputstream;
import java.io.outputstream;
public class fileservice {
 /**
  * 保存数据
  * 
  * @param outputstream
  * @param content
  * @throws exception
  */
 public static void save(outputstream outputstream, string content) throws exception {
  outputstream.write(content.getbytes());
  outputstream.close();
 }
 /**
  * 读取数据
  * 
  * @param inputstream
  * @return
  * @throws exception
  */
 public static string read(inputstream inputstream) throws exception {
  // 往内存写数据
  bytearrayoutputstream bytearrayoutputstream = new bytearrayoutputstream(); 
  // 缓冲区
  byte[] buffer = new byte[1024]; 
  int len = -1;
  while ((len = inputstream.read(buffer)) != -1) {
   bytearrayoutputstream.write(buffer, 0, len);
  }
  // 存储数据
  byte[] data = bytearrayoutputstream.tobytearray(); 
  bytearrayoutputstream.close();
  inputstream.close();
  return new string(data);
 }
}

fileservicetest测试类:

package com.ljq.service;
import java.io.inputstream;
import java.io.outputstream;
import android.content.context;
import android.test.androidtestcase;
import android.util.log;
/**
 * android测试
 * 
 * @author jiqinlin
 *
 */
public class fileservicetest extends androidtestcase {
 private final string tag = "fileservicetest"; 
 public void testsave() throws exception{
  outputstream outputstream = this.getcontext().openfileoutput("ljq.txt", context.mode_private);
  fileservice.save(outputstream, "abc");
 }
 public void testread() throws exception{
  inputstream inputstream= this.getcontext().openfileinput("ljq.txt");
  string content = fileservice.read(inputstream);
  log.i(tag, content);
 }
}

清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.ljq.activity"
  android:versioncode="1"
  android:versionname="1.0">
 <application android:icon="@drawable/icon" android:label="@string/app_name">
  <uses-library android:name="android.test.runner" />
  <activity android:name=".fileactivity"
     android:label="@string/app_name">
   <intent-filter>
    <action android:name="android.intent.action.main" />
    <category android:name="android.intent.category.launcher" />
   </intent-filter>
  </activity>
 </application>
 <uses-sdk android:minsdkversion="7" />
 <instrumentation android:name="android.test.instrumentationtestrunner"
   android:targetpackage="com.ljq.activity" android:label="tests for my app" />
</manifest> 

希望本文所述对大家的android程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网