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

本文实例讲述了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程序设计有所帮助。

(0)

相关推荐

  • android中使用SharedPreferences进行数据存储的操作方法

    很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友.对于软件配置参数的保存,如果是window软件通常我们会采用ini文件进行保存,如果是 j2se应用,我们会采用properties属性文件或者xml进行保存.如果是Android应用,我们最适合采用什么方式保存软件配置参数呢?Android 平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数.使用 SharedPrefe

  • Android 数据存储之 FileInputStream 工具类及FileInputStream类的使用

    安卓的三种本地的典型数据存储方式 SharedPreferences 以文件格式保存在本地存储中 SQL数据库 这篇文章就是讲解一下如何使用 SharedPreferences 保存文件.主要解释什么都写在注释里面的. IDE : Android Studio 参考文章:http://www.jb51.net/article/74215.htm 絮叨一下:本来文件操作这一块上周就想把其弄懂,然后继续进一步的学习.但是因为官方的 Android Training 之中的概念太过于繁杂.导致我认为存

  • Android 文件数据存储实例详解

    Android之文件数据存储 一.文件保存数据介绍 Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的.文件可用来存放大量数据,如文本.图书.音频等. File对象适合按照从开始到结束的顺序不跳过地读取或写入大量数据.例如,它适合于图片文件或通过网络交换的任何内容. 数据存储的默认位置:/data/data/<包名>/files/***.***. 所有的Android设备都有两个文件存储区域:"

  • Android通过"记住密码"功能学习数据存储类SharedPreferences详解及实例

    SharedPreferences是Android中存储简单数据的一个工具类.可以想象它是一个小小的Cookie,它通过用键值对的方式把简单数据类型(boolean.int.float.long和String)存储在应用程序的私有目录下(data/data/包名/shared_prefs/)自己定义的xml文件中. 一.简介 它提供一种轻量级的数据存储方式,通过eidt()方法来修改里面的内容,通过Commit()方法来提交修改后的内容. 二.重要方法 public abstract boole

  • Android 数据存储方式有哪几种

    以下内容给大家介绍Android数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 本文主要介绍如何使用文件来存储数据.Android文件操作用到的是Java.IO中的FileOutputStream和FileInputStream类. 一.存储文件 首先实例化一个FileOutputStream. FileOutputStream foStream = openFileOutput(fileN

  • Android编程中的5种数据存储方式

    本文介绍Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据 2 文件存储数据      3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面详细讲解这五种方式的特点 第一种: 使用SharedPreferences存储数据 适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型.基本类型的值.比如应用程序的各种配置信息(如是否打开音效.是否使用震动效果.小游戏的玩家积分等),解锁口 令密

  • 在android开发中进行数据存储与访问的多种方式介绍

    数据存储与访问 很多时候我们的软件需要对处理后的数据进行存储或再次访问.Android为数据存储提供了多种方式,分别有如下几种: 文件 SharedPreferences SQLite数据库 内容提供者(Content provider) 网络 使用文件进行数据存储 首先给大家介绍使用文件如何对数据进行存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的. 复制代码 代码如下: public clas

  • 详解Android数据存储之Android 6.0运行时权限下文件存储的思考

    前言: 在我们做App开发的过程中基本上都会用到文件存储,所以文件存储对于我们来说是相当熟悉了,不过自从Android 6.0发布之后,基于运行时权限机制访问外置sdcard是需要动态申请权限,所以以往直接sdcard根目录上直接新建了一个xxx/cache/目录来做文件存储就会不是那么容易控制了,所以有必要重新认识一下Android文件存储的相关知识了. 背景: 有关外置sdcard的读写权限 <uses-permission android:name="android.permissi

  • Android平台中实现数据存储的5种方式

    本文介绍Android中的5种数据存储方式,具体内容如下 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面将为大家一一详细介绍.  第一种:使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一

  • Android数据存储之SQLite使用

    SQLite是一款开源的.嵌入式关系型数据库,第一个版本Alpha发布于2000年.SQLite在便携性.易用性.紧凑性.高效性和可靠性方面有着突出的表现. 在Android中创建的SQLite数据库存储在:/data/data/<包名>/databases/目录下. 主要特点: -轻量级 -独立性,没有不依赖,无需安装 -跨平台,支持众多操作系统 -支持高达2TB大小的数据库 -每个数据库以单个文件的形式存在 -以B-Tree的数据结构形式存储在硬盘 SQLite的数据类型: SQLite支

  • android数据存储之文件存储方法

    文件存储是 Android 中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动的保存到文件当中的. 概述 文件存取的核心就是输入流和输出流. Android文件的操作模式 文件的相关操作方法 文件读写的实现 openFileOutput和openFileInput方法 /** * openFIleOutput ,openFileInput * 这两种方法同sp一样只能讲文件保存到手机内存固定的路径中, * 默认为 /data/data/<packageName

  • Android开发笔记之: 数据存储方式详解

    无论是神马平台,神马开发环境,神马软件程序,数据都是核心.对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用.总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式:数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越,有查询功能,可以加密,可以加锁,可以跨应用,跨平台等等:网络,则用于比较重要的事情,比如科研,勘探,航空等实时采集到的数据需要马上通过网络

随机推荐