您的位置:首页 > 其它

五、使用文件进行数据存储

2013-03-22 17:59 435 查看


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

文件
SharedPreferences(参数)
SQLite数据库
内容提供者(Content provider)
网络(Web)
首先给大家介绍使用文件如何对数据进行存储
Activity提供了openFileOutput()方法可以用于把数据输出到文件中.

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目录就可以看到该文件
第二参数
用于指定操作模式,有四种模式
如果要打开存放在/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 {

//存数据(从字符串中content读byte数据,写到OutputStream中)
public static void save(OutputStream outputStream, String content) throws IOException {
// TODO Auto-generated method stub
outputStream.write(content.getBytes());
outputStream.close();
}
//读数据(从inputStream中读数据,写到内存ByteArrayOutputStream中。
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: