Android课程---关于数据存储的学习
activity_data1.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.hanqi.test5.DataActivity1" android:orientation="vertical"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/et_1" android:hint="key"/> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/et_2" android:hint="value"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:text="保存" android:layout_weight="1" android:onClick="bt1_OnClick"/> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:text="读取" android:layout_weight="1" android:onClick="bt2_OnClick"/> </LinearLayout> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/et_3" android:hint="要存储的内容"/> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/et_4" android:hint="从文件中读取的内容"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:text="保存" android:layout_weight="1" android:onClick="bt3_OnClick"/> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:text="读取" android:layout_weight="1" android:onClick="bt4_OnClick"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:text="保存文件" android:layout_weight="1" android:onClick="bt5_OnClick"/> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:text="读取文件" android:layout_weight="1" android:onClick="bt6_OnClick"/> </LinearLayout> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/vipflower" android:id="@+id/iv_4"/> </LinearLayout>
DataActivity1.java
package com.hanqi.test5; import android.content.SharedPreferences; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.EditText; import android.widget.ImageView; import android.widget.Toast; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.PrintStream; public class DataActivity1 extends AppCompatActivity { EditText et_1; EditText et_2; EditText et_3; EditText et_4; ImageView iv_4; SharedPreferences sp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_data1); et_1 = (EditText)findViewById(R.id.et_1); et_2 = (EditText)findViewById(R.id.et_2); et_3 = (EditText)findViewById(R.id.et_3); et_4 = (EditText)findViewById(R.id.et_4); iv_4 = (ImageView)findViewById(R.id.iv_4); //1.获取sp实例,指定了文件名和操作模式 sp = getSharedPreferences("mydata",MODE_PRIVATE); } //操作assets内的文件 public void bt5_OnClick(View v) { //1.获取AssetManager管理器 AssetManager am = getAssets(); try { //2.打开文件,获取输入流 InputStream is = am.open("yuantu.png"); //3.获取输出流 FileOutputStream fos = openFileOutput("yuantu.png",MODE_PRIVATE); //4.边读边写 byte[] b = new byte[1024]; int i =0; while ((i = is.read(b))>0) { fos.write(b,0,i); } fos.close(); is.close(); Toast.makeText(DataActivity1.this, "保存成功", Toast.LENGTH_SHORT).show(); } catch (Exception e) { e.printStackTrace(); Toast.makeText(DataActivity1.this, "保存失败", Toast.LENGTH_SHORT).show(); } } //从手机内部存储读图片文件 public void bt6_OnClick(View v) { //改变ImageView的图片来源,指向手机存储空间 //1.获取文件存储的绝对路径 String filepath = getFilesDir().getAbsolutePath(); //2.组合图片文件的完整路径 filepath += "/yuantu.png"; //3.生成位图实例 Bitmap bm = BitmapFactory.decodeFile(filepath); //4.改变ImageView的图片来源 iv_4.setImageBitmap(bm); } //文件名 final String FILENAME = "test.txt"; public void bt3_OnClick(View v) { //1.获取要存储的内容 String content = et_3.getText().toString(); //2.获取输出流 try { FileOutputStream fos_1 = openFileOutput(FILENAME,MODE_APPEND); //3.构造PrintStream PrintStream pm = new PrintStream(fos_1); //4.写入内容 pm.println(content); //5.关闭 pm.close(); fos_1.close(); Toast.makeText(DataActivity1.this, "保存成功", Toast.LENGTH_SHORT).show(); } catch (Exception e) { e.printStackTrace(); Toast.makeText(DataActivity1.this, "保存失败", Toast.LENGTH_SHORT).show(); } } public void bt4_OnClick(View v) { try { //1.获取输入流 FileInputStream fis = openFileInput(FILENAME); //2.定义读取的数组 byte[] b = new byte[1024]; //3.读出的数据的长度 int i =0; StringBuilder sb_1 = new StringBuilder(); while ((i=fis.read(b))>0) { sb_1.append(new String(b,0,i) ); } fis.close(); //设置显示读出内容 et_4.setText(sb_1); Toast.makeText(DataActivity1.this, "读取成功", Toast.LENGTH_SHORT).show(); } catch (Exception e) { e.printStackTrace(); Toast.makeText(DataActivity1.this, "读取失败", Toast.LENGTH_SHORT).show(); } } //保存 public void bt1_OnClick(View v) { //1.获取key和value String key = et_1.getText().toString(); String value = et_2.getText().toString(); if (key.length() == 0 || value.length() == 0) { Toast.makeText(DataActivity1.this, "key或value不能为空", Toast.LENGTH_SHORT).show(); } else { //2.取得Editor SharedPreferences.Editor editor = sp.edit(); //3.放入键值对 editor.putString(key, value); //4.提交保存 boolean b = editor.commit(); if (b) { Toast.makeText(DataActivity1.this, "保存成功", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(DataActivity1.this, "保存失败", Toast.LENGTH_SHORT).show(); } } } //读取 public void bt2_OnClick(View v) { //1.获取要读的key String key = et_1.getText().toString(); //2.读并设置文本框 et_2.setText(sp.getString(key, "没有发现key")); } }
数据存储总结之思维导图: