TXT+sqlite+Android,Android的四种储存方式(SQLite、FileSystem、SDCardSystem、SharedPreferences)...

主要记录一下安卓中几种常用的存储方式的用法。

一、SQLite

1、创建SQLiteOpenHelper对象(当然SQLiteOpenHelper是抽象类,不能直接创建);

2、通过上面创建的对象调用getWritableDatabase()方法获取SQLiteDatabase对象;

3、通过SQLiteDatabase对象就可以操作数据库了。

创建一个类继承自SQLiteOpenHelper

importandroid.content.Context;importandroid.database.sqlite.SQLiteDatabase;importandroid.database.sqlite.SQLiteDatabase.CursorFactory;importandroid.database.sqlite.SQLiteOpenHelper;public class DBHelper extendsSQLiteOpenHelper {private final static String TABLE_NAME="sun";//表名public DBHelper(Context context, String name, CursorFactory factory, intversion) {super(context, name, factory, version);

}

@Overridepublic voidonCreate(SQLiteDatabase db) {

String sql= "create table if not exists " + TABLE_NAME+"(id integer primary key autoincrement,sunValue varchar,Date integer)";

db.execSQL(sql);

}

@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, intnewVersion) {

String sql= "drop table if exists "+TABLE_NAME;

db.execSQL(sql);

onCreate(db);

}

}

注意:至少需要创建一个构造方法并调用super方法,并覆写两个方法,第一个方法onCreate创建数据库时调用,第二个方法onUpgrade版本更新时调用。

这时可以创建SQLiteOpenHelper对象并调用getWritableDatabase()方法获取SQLiteDatabase对象

DBHelper dbHelper = new DBHelper(MainActivity.this, "db_Sun.db", null, 1);

SQLiteDatabase db= dbHelper.getWritableDatabase();

注意:db_Sun.db是要创建的数据库名

获取到SQLiteDatabase对象就可操作数据库了,如 :插入一条数据

String sql = "insert into sun(sunValue,Date) values('"+value+"',"+new Date().getTime()+") ";

db.execSQL(sql);

查询数据库中最新的一条数据(根据时间戳排序查询)

Cursor c = db.rawQuery("select * from sun order by Date desc limit 1", null);

c.moveToFirst();/*************************************/

while (!c.isAfterLast()) {/*************************************/String sunValue= c.getString(c.getColumnIndex("sunValue"));long date = c.getLong(c.getColumnIndex("Date"));

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

Date date2= newDate(date);

Log.i(TAG, sunValue+"--"+sdf.format(date2));

recv_tv.setText(sunValue);

c.moveToNext();/**************************************/}

c.close();/**************************************/

二、FileSystem

其实就是文件的读存

1、创建File

2、获取输出流/输入流

java.io.FileOutputStream.FileOutputStream(File file, boolean append) throws FileNotFoundException

3、写入或读取

4、关闭流

下面是一个完整FileSystemStorage的例子(其中Context为上下文,如:MainActivity.this)

packagefile;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.FileReader;importjava.io.IOException;importandroid.content.Context;public classFileOperation {private FileInputStream fis;//输入流

private FileOutputStream fos;//输出流

private final String FILENAME = "fileContent.txt";privateContext context;publicFileOperation(Context context) {super();this.context =context;

}/*** 读取系统文件写入的内容

*

*@return*@throwsIOException*/

public String readFileContent() throwsIOException {

String filecontent= null;

File file= newFile(context.getFilesDir(), FILENAME);

fis= newFileInputStream(file);

filecontent=readFis(fis);//System.out.println("readFileContent="+filecontent);

returnfilecontent;

}/*** 把输入流里面的内容读取到字节数组中

*

*@paramfis

* 输入流

*@throwsIOException*/

private String readFis(FileInputStream fis) throwsIOException {//定义缓冲区

byte[] buf = new byte[1024];int len = -1;

StringBuilder sb= newStringBuilder();//循环读取fis中的数据

while ((len = fis.read(buf)) != -1) {

sb.append(new String(buf, 0, len));

}//System.out.println("readFis="+sb.toString());

returnsb.toString();

}/*** 读取文件的最后一行数据

*

*@return

*/

publicString readFisLastLine() {

File file= newFile(context.getFilesDir(), FILENAME);

String lastLine= null;

String buf= null;

BufferedReader br= null;try{

br= new BufferedReader(newFileReader(file));if (file.length() > 1024 * 1024 * 1024) {

br.skip(file.length()/ 3 * 2);//当文件超过1M大小的时候,跳过文本长度的2/3,具体跳过多少视实际情况而定,文件越大可以跳过的部分越多

}while ((buf = br.readLine()) != null && buf != "

") {

lastLine=buf;

}

br.close();

}catch(IOException e) {if (br != null) {try{

br.close();

}catch(IOException e1) {

e1.printStackTrace();

}

}

e.printStackTrace();

}returnlastLine;

}/*** 写入文件

*

*@paramcontent

*@throwsIOException*/

public void writeContent(String filecontent) throwsIOException {//通过传入的文件获得fos,默认为MODE_PRIVATE覆写

File file = newFile(context.getFilesDir(), FILENAME);if (false ==file.exists()) {

file.createNewFile();

filecontent= "数据 " + "时间" + "

" + filecontent;//加个列名

}

fos= new FileOutputStream(file, true);//追加//fos=openFileOutput(FILENAME, MODE_PRIVATE);//向fos写入文件内容

fos.write(filecontent.getBytes());//刷新

fos.flush();//关闭流,释放资源

fos.close();

}

}

三、SDCardSystem

这和filesystem差不多,只是文件位置不同

文件写入方法

/*** 写入内容*/

protected voidwriteContent(String content) {/*** 检查SDCard的挂载(插入)状态*/String sdCardState=Environment.getExternalStorageState();

Log.i("state", sdCardState);/*** 把获取到的sdCard状态,进行判断是否挂载*/

if (sdCardState.equals(Environment.MEDIA_MOUNTED)) {//SDCard已挂载

File file = newFile(Environment.getExternalStorageDirectory(), FILENAME);

Log.i("文件路径:", Environment.getExternalStorageDirectory().getAbsolutePath());try{

fos= newFileOutputStream(file);

fos.write(content.getBytes());

fos.flush();

fos.close();

}catch(FileNotFoundException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}

}

}

文件读取方法

/*** 读取SDCard文件的方法*/

protectedString readSdCardFile() {/*** 获取并判断SDCard挂载状态*/

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {//SDCard已挂载

File file = newFile(Environment.getExternalStorageDirectory(), FILENAME);try{

fis= newFileInputStream(file);

content=readFis(fis);

}catch(FileNotFoundException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}

}returncontent;

}private String readFis(FileInputStream fis) throwsIOException {byte[] buf = new byte[1024];int len = -1;

StringBuilder sb= newStringBuilder();while ((len = fis.read(buf)) != -1) {//循环读取fis中的数据

sb.append(new String(buf, 0, len));

}//关闭流

fis.close();returnsb.toString();

}

四、SharedPreferences(喜好.xml文件存储)

SharedPreferences文件是一个xml文件,保存的是键值对(key-value)。

1、通过上下文SharedPreferences对象;

2、获取Editor;

3、put值;

4、提交。

完整的存储读取类

packagefile;importjava.util.Map;importandroid.content.Context;importandroid.content.SharedPreferences;importandroid.content.SharedPreferences.Editor;public classFileOperation {private final String SPNAME = "fileContent";//喜好文件名

privateContext context;privateSharedPreferences sp;publicFileOperation(Context context) {super();this.context =context;

}/*** 读取系统文件写入的内容(这里读取最后一条)

*@return

*/

publicString readFileContent() {

sp=context.getSharedPreferences(SPNAME, Context.MODE_PRIVATE);//sp.getString(key, defValue);//通过key获取一个value

Map map =sp.getAll();/*for (Entry entry : map.entrySet()) {//遍历所有的key-value

System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());

}*/String lastKey= null;

String lastValue= null;for (String key : map.keySet()) {//遍历所有的Key,得到最后一个key

lastKey =key;

}if (null !=lastKey) {

lastValue= (String) map.get(lastKey);//获取最后一个value//lastValue = sp.getString(lastKey, "");

}returnlastValue;

}/*** 写入文件

**/

public voidwriteContent(String key,String value) {/** sp=MainActivity.this.getPreferences(mode);

* 这种方式获取的喜好文件一个Activity有且仅有一个 原因是:它得到的喜好文件的文件名为这个Activity的类名*/

//通过上下文获取sp

sp =context.getSharedPreferences(SPNAME, Context.MODE_PRIVATE);//获取editor

Editor editor=sp.edit();//放入键值对

editor.putString(key, value);//注意:放入键值对后一定要提交

editor.commit();

}

}

小结:

SQLite、FileSystem、SharedPreferences方式的文件储存的位置都在根目录下data目录下的data目录下的当前包名下:/data/data/com.yyc.test/...

SDCardSystem方式的存储位置在sd卡中(我手机没有sd卡,不知道为什么直接在根目录下,欢迎右上角QQ交流)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值