android平台的数据存储主要有5种方式:
1.文件存储数据;
2.使用SharedPreferences存储数据;
3.SQLite数据库存储数据;
4.使用ContentProvider存储数据;
5.网络存储数据;
这里介绍文件存储:
文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与Java中实现I/O的程序是完全一样的,
提供了openFileInput()和openFileOutput()方法来读取设备上的文件。这种方式数据存储在data/data/<包名>下的files文件夹下。
当然文件也可以从程序的raw文件夹或Asset文件夹读取。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import org.apache.http.util.EncodingUtils;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class FileActivity extends Activity {
public static final String ENCODING = "UTF-8"; //编码格式
String fileName = "test.txt";//文件的名称
String message = "这是一个关于文件I/O的示例。"; //写入和读出的数据信息
TextView tv;
Button btn1;
Button btn2;
Button btn3;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.tv);
btn1 = (Button) findViewById(R.id.btn1);
btn2 = (Button) findViewById(R.id.btn2);
btn3 = (Button) findViewById(R.id.btn3);
writeFileData(fileName, message);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tv.setText(readFileData(fileName));
}
});
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tv.setText(getFromRow("test1.txt"));
}
});
btn3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tv.setText(getFromAsset("test2.txt"));
}
});
}
//向指定文件中写入指定的数据
public void writeFileData(String fileName,String message){
try {
FileOutputStream fout = openFileOutput(fileName, MODE_PRIVATE);
byte [] bytes = message.getBytes(); //将要写入的字符串转换为byte数组
fout.write(bytes); //将byte数组写入文件
fout.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//打开指定文件,读取其数据,返回字符串对象
public String readFileData(String fileName){
String result = "";
try {
FileInputStream fin = openFileInput(fileName); //获得FileInputStream对象
int length =fin.available(); //获取文件长度
byte [] buffer = new byte[length];
fin.read(buffer);
result= EncodingUtils.getString(buffer, ENCODING); //将byte数组转换成指定格式的字符串
fin.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
//方法:从resource中的raw文件夹中获取文件并读取数据
public String getFromRow(String fileName){
String result = "";
try {
InputStream in = getResources().openRawResource(R.raw.test1);
int length = in.available();
byte [] buffer =new byte[length];
in.read(buffer);
result = EncodingUtils.getString(buffer, ENCODING);
in.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
// 从asset中获取文件并读取数据
public String getFromAsset(String fileName){
String result="";
try {
InputStream in = getResources().getAssets().open(fileName);
int length = in.available(); //获取文件的字节数
byte [] buffer = new byte[length]; //创建byte数组
in.read(buffer); //将文件中的数据读取到byte数组中
result = EncodingUtils.getString(buffer, ENCODING);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}