文件存储
存入文件:
private void save() {
String content = "hello world";
FileOutputStream out = null;
BufferedWriter writer = null;
try {
out = openFileOutput("data", MODE_APPEND);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(content);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
}
}catch (IOException e) {
e.printStackTrace();
}
}
}
核心方法:openFileOutput() 方法,此方法接收两个参数,第一个文件名(不可以包含路径),第二个是文件的操作模式。此方法返回一个FileoutputStream对象,用于构建一个BufferedWriter对象。
读取文件:
private String load() {
FileInputStream in = null;
BufferedReader reader = null;
String content = "";
try {
in = openFileInput("data");
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while ((line = reader.readLine()) != null) {
content += line;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return content;
}
核心方法:openFileInput() 方法,此方法接收一个参数:文件名(不可以包含路径)。此方法返回一个FileInputStream对象,用于构建一个BufferedReader对象。
简单实现退出程序保存数据开启程序读取数据
保存在EditText中所写数据:
public class FileTest extends AppCompatActivity {
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file_test);
editText = (EditText) findViewById(R.id.edittext);
String content = load();
if (!TextUtils.isEmpty(content)) {
editText.setText(content);
editText.setSelection(content.length());
Toast.makeText(this, "Restoring succeed", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
String content = editText.getText().toString();
save(content);
}
private void save(String content) {
FileOutputStream out = null;
BufferedWriter writer = null;
try {
out = openFileOutput("data", MODE_APPEND);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(content);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
}
}catch (IOException e) {
e.printStackTrace();
}
}
}
private String load() {
FileInputStream in = null;
BufferedReader reader = null;
String content = "";
try {
in = openFileInput("data");
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while ((line = reader.readLine()) != null) {
content += line;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return content;
}
}
SharedPreference存储
SharePreference是使用键值对的方式来存储数据的。支持多种不同数据类型存储。
存数据用法:
1.首先获取SharePreferences对象:
- 通过Context类中的SharedPreferences()方法,此方法接收两个参数,第一个是文件名,第二个是文件的操作模式。
- 通过Activity类中的getPreference()方法,此方法接收一个参数:操作模式,因为这个方法会自动将当前活动类名作为SharedPreferences的文件名。
- 通过PreferenceManager类中的getDefaultSharedPreferences()方法,此方法接收一个Context参数,并自动将当前应用程序的包名作为前缀来命名SharedPreferences文件。
2.调用SharedPreferences对象的edit()方法获取一个SharedPreferences.Editor对象。
3.向SharedPreferences.Editor对象中添加数据,比如添加一个字符串:putString(“name”, “Tom”)。
4.调用apply()方法将添加的数据提交,从而完成数据存储操作。
此处也可使用commit()方法 commit()和apply()的区别
读数据用法:
1.首先获取SharePreferences对象
2.使用SharePreferences对象的get()方法读取,例如:getString(),该方法接收两个参数,第一个时键,第二个是当找不到键所对应值时,它用于指定值。
简单实现写数据和读取数据
Button buttonWrite = (Button) findViewById(R.id.write);
buttonWrite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();
editor.putString("name", "Tom");
editor.putFloat("tall", 188);
editor.apply();
}
});
Button buttonRead = (Button) findViewById(R.id.read);
buttonRead.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences pref = getSharedPreferences("data", MODE_PRIVATE);
String name = pref.getString("name", "");
float tall = pref.getFloat("tall", 0);
}
});
}
数据库存储
SQLite数据库存储
借助SQLiteOpenHelper帮助类可以简单地对数据库进行创建和升级,SQLiteOpenHelper是一个抽象类,使用它时就需要自己创建一个帮助类去继承它。
首先新建MyDatabaseHelper帮助类继承自SQLiteOpenHelper
public class MyDatabaseHelper extends SQLiteOpenHelper {
private static final String CREATE_BOOK = "create table Book ("
+ "id integer primary key autoincrement, "
+ "author text, "
+ "price real, "
+ "name text )";
private static final String CREATE_Category = "create table Category ("
+ "id integer primary key autoincrement, "
+ "category_name text, "
+ "category_code integer)";
private Context mContext;
public MyDatabaseHelper(@Nullable Context context, @Nullable String name,
@Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BOOK);
Toast.makeText(mContext, "Create succeed", Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("drop table if exists Book");
db.execSQL("drop table if exists Category");
onCreate(db);
}
}
该类中onCreate()方法用于创建表,onUpgrade()方法用于升级数据库。
public class FileTest extends AppCompatActivity {
private EditText editText;
private MyDatabaseHelper dbHelper;
private SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file_test);
一.创建数据库
dbHelper = new MyDatabaseHelper(FileTest.this, "BookStore.db", null, 1);
Button createButton = (Button) findViewById(R.id.create_database);
createButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
db = dbHelper.getWritableDatabase();
}
});
创建数据库时首先创建帮助类对象,构造方法传入四个参数,第一个context,第二个用于指定数据库名,第三个参数允许我们查询数据时返回一个Cursor对象,一般传入null,第四个参数表示当前数据库的版本号,更新数据库是要改值。
二.添加数据
Button insertButton = (Button) findViewById(R.id.insert);
insertButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ContentValues values = new ContentValues();
values.put("name", "The Three Country");
values.put("author", "ljh");
values.put("price", 222.2);
db.insert("Book", null, values);
values.clear();
}
});
SQLiteDatabase中提供了insert() 用于添加数据,他接收三个参数,第一个表名,第二个参数用于在未指定添加数据的情况下给某些可为空的列自动赋值NULL,一般用不到,直接传入null,第三个是一个ContentValues对象,它提供了put()方法,用于向ContentValues中添加数据,之后传递给insert()。
三.更新数据
Button upDataButton = (Button) findViewById(R.id.upData);
upDataButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ContentValues values = new ContentValues();
values.put("price", 888.8);
db.update("Book", values, "name = ?", new String[]{"The Three Country"});
}
});
SQLiteDatabase中提供了updata() 用于更新数据,他接收四个参数,第一个表名,第二个参数是一个ContentValues对象,它提供了put()方法,用于向ContentValues中添加数据,第三个参数用于约束,第四个参数用于给占位符赋值。
四.删除数据
Button deleteButton = (Button) findViewById(R.id.delete);
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
db.delete("Book", "price > ?", new String[]{"500"});
}
});
SQLiteDatabase中提供了delete() 用于删除数据,他接收三个参数,第一个表名,第二个参数用于约束,第三个参数用于给占位符赋值。
五.查询数据
Button queryButton = (Button) findViewById(R.id.query);
queryButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Cursor cursor = db.query("Book",null,null,null,
null,null,null);
if (cursor.moveToFirst()) {
do {
String name = cursor.getString(cursor.getColumnIndex("name"));
String author = cursor.getString(cursor.getColumnIndex("author"));
double price = cursor.getDouble(cursor.getColumnIndex("price"));
} while (cursor.moveToNext());
}
}
});
}
}
SQLiteDatabase中提供了query() 用于查询数据,他返回一个Cursor对象,查询到的数据都将从这个对象中取出。 Cursor的get() 方法用于获取数据。 Cursor的getColumnIndex() 方法用于获取到某一列在表中对应的位置索引。
|