android+画面数据存储方式,Android学习之五种数据存储方式(一)
Android学习之数据存储方式java
今天咱们主要学习前两种数据存储方式。
一、SharedPreferences存储数据
(1)、一种经常使用的数据存储方式。
(2)、本质是基于xml文件存储键值对(key-value)数据。
(3)、其只能读取数据,存储和修改须要经过Editor对象实现。
(4)、SharedPreferences将数据以键值对(key-value)的形式保存至xml文件中,而生成的xml文件保存于/data/data/程序包名/shared_prefs目录下。
(5)、SharedPreferences的使用很是简单,可以轻松的存放数据和读取数据,但只能保存基本类型的值 ,因此,适用于简单的数据保存,通常用于变量的存储。
1.一、SharedPreferences对象的经常使用方法:web
方法
说明
contains(String key)
判断SharedPreferences是否包含特定名称为键(key)的数据,返回值类型为boolean,是返回true,否返回false。
edit()
获取SharedPreferences数据里所有的键值对(key-value),返回值类型为Map。
getAll()
返回一个Edit对象,用于操做SharedPreferences,返回值类型为Editor。
getXxx(String key, Xxx defValue)
获取SharedPreferences指定键(key)所对应的值(value),其中Xxx表示不一样的数据类型。
1.二、SharedPreferences.Editor对象的经常使用方法 :数据库
方法
说明
clear()
清空SharedPreferences里全部的数据。
putXxx(String key,Xxx value)
向SharedPreferences存入指定的key对应的数据,其中Xxx与以前所述相同同样,表示不一样的数据类型。
commit()
当Editor编辑完成后,调用该方法能够提交修改,至关于数据库中的提交操做。不管对SharedPreferences对象进行了什么操做,最后都必须使用commit()方法进行保存,不然将没法存储修改信息。返回值类型为boolean,提交成功返回true,失败返回false。
remove(String key)
删除SharedPreferences里指定key对应的值。返回值类型为Editor。
1.三、SharePreferences的四种操做方式 :数组
方法
说明
Context.MODE_PRIVATE
默认操做,SharePreferences数据只能被本应用程序读、写,写入的内容会覆盖原文件的内容。
Context.MODE_APPEND
检查SharePreferences文件是否存在,没有就建立新的SharePreferences文件或存在就追加写入SharePreferences文件中。
Context.MODE_WORLD_READABLE
SharePreferences文件可被其余应用读取,可是不能写入。
Context.MODE_WORLD_WRITEABLE
SharePreferences文件可被其余应用读取并写入。
1.四、两种获取SharedPreferences对象的方法
(1)、使用Contex.getSharedPreferences(String name,int mode)获取.
Name为配置文件的名称,mode为操做方式,可被同一应用程序下的其余组件共享。
(2)、使用Activity.getPreferences(int mode)获取.
(只能在本Activity中使用。
1.五、使用SharedPreferences存取数据
保存数据:
1.经过Context或Activity获取SharePreferences对象
2.使用SharePreferences的edit获取SharePreferences.Editor对象
3.使用Editor对象的putXXX方法保存key-value数据对
4.使用Editor对象的commit方法提交数据,进行实际存储
获取数据:
1.经过Context或Activity获取SharePreferences对象
2.使用SharePreferences对象的getXXX方法来获取数据网络
二、文件存储数据
文件存储能够分红两类 :
一、将文件存储在应用程序内,文件保存在/data/data//files/目录下,称为File存储;
二、将文件存储在外接的存储设备中,也就是存储在SDCard存储卡中,称为SDCard存储。
2.一、File存储
Android中读取/写入文件的方法与java中的I/O操做同样。利用openFileInput()方法与FileInputStream()对象读取设备上的文件,并利用openFileOutput()方法与FileOutputStream()对象来建立文件,但File存储下,文件在不一样的程序之间不能共享。
2.1.一、使用FileOutputStream类对象来建立文件信息:
• 使用OpenFileOutput(string name, int mode)函数建立对象,name为文件名,不须要路径信息和扩展名;mode为操做方式。
• 使用对象的.write(byte[] bytes)来写入二进制文件流,若为其它类型数据,则须要转换为二进制类型。
• 使用对象的.close()来关闭对象。app
2.1.二、使用FileInputStream类对象来读取文件信息:
• openFileInput(String name)建立对象。
• 使用对象的.read(byte[] bytes)来读取二进制文件流。
• 将读取的二进制数据流,转换为本来的数据信息。less
2.1.三、File存储经常使用操做:ide
方法
说明
openFileOutput(String name, int mode)
保存文件内容,打开指定的私有文件输出流,返回值类型为FileOutputStream,name为要打开的文件名,不能包含路径分隔符,mode四种模式以下,在使用模式时,能够用"+"来选择多种模式,好比openFileOutput(FileName, Environment.MODE_PRIVATE+MODE_WORLD_READABLE)。
openFileInput(String name)
读取文件内容,打开指定的私有文件输出流,返回值类型为FileInputStream,name为要打开的文件名,不能包含路径分隔符,对于File存储所建立的文件只能被建立该文件的应用访问,若是但愿文件能被其余应用读和写,能够在建立文件时,指定Environment.MODE_WORLD_READABLE和Environment.MODE_WORLD_WRITEABLE权限。
deleteFile(String name)
删除指定的文件,返回值类型为boolean,name为要删除的文件名,不能包含路径。
getDir(String name, int mode)
在应用程序的数据文件下获取或建立name对应的子目录,返回值类型为File。
getFilesDir()
获得该应用程序数据文件夹的绝对路径,返回值类型为File。
fileList()
获得该应用程序数据文件夹下的所有文件的文件名,返回值类型为String[]。
• mode为操做模式,有如下4种保存模式:
Environment.MODE_PRIVATE:为默认操做模式,表明该文件是私有数据,只能被应用自己访问,在该模式下写入的内容会覆盖原文件的内容。
Environment.MODE_APPEND:检查文件是否存在,存在就往文件追加内容,不然就建立新文件。
Environment.MODE_WORLD_READABLE:表示当前文件能够被其余应用读取。
Environment.MODE_WORLD_WRITEABLE:表示当前文件能够被其余应用写入。svg
2.二、SDCard存储
Android为咱们提供了SDCard的相关方法方便咱们的操做。
2.2.一、Environment类的经常使用方法:
方法
说明
getDataDirectory()
得到Android下的data文件夹的目录,返回值类型为File。
getDownloadCacheDirectory()
得到AndroidDownload/Cache内容的目录,返回值类型为File。
getExternalStorageDirectory()
得到Android外部存储器也就是SDCard的目录,返回值类型为File。
getRootDirectory()
得到Android下的root文件夹的目录,返回值类型为File。
getExternalStorageState()
得到Android外部存储器的当前状态,返回值类型为String,有如下几种保存模式。
•保存模式:
Environment.MEDIA_BAD_REMOVAL:在没有正确卸载SDCard以前就移除。
Environment.MEDIA_CHECKING:正在磁盘检查。
Environment.MEDIA_MOUNTED:已经挂载而且拥有可读可写权限。
Environment.MEDIA_MOUNTED_READ_ONLY:已经挂载, 但只拥有可读权限。
Environment.MEDIA_NOFS:对象空白, 或者文件系统不支持。
Environment.MEDIA_REMOVED:已经移除扩展设备。
Environment.MEDIA_SHARED:若是SDCard未挂载, 同时经过USB大容量存储方式与其余设备共享。
Environment.MEDIA_UNMOUNTABLE:不能够挂载任何扩展设备。
Environment.MEDIA_UNMOUNTED:已经卸载。
2.2.二、对SDCard的写入与读取操做:
•1. 在AndroidMainfest.xml中添加权限。
在API23以上,还要在JAVA代码中添加请求权限:
// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE};
public static void verifyStoragePermissions(AppCompatActivity activity) {
int permission = ActivityCompat.checkSelfPermission(activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE);
}
}
•2. 判断手机设备上是否有SDCard且具备读写SDCard的权限,用Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)来判断。
•3.获取SD卡的目录。
File sdCardDir=Enviroment.getExternalStorageDirectory()。
或File sdCardDir=new File(“/sdcard”); //直接访问默认目录。
☆☆☆•4.使用File类来写入SD卡文件。
•使用File类的构造函数设置SD卡文件,并指明路径和名称。
File savefile=new File(String dir, String filename)。
•建立FileOutputStream类对象来绑定File对象。
FileOutputStream fos= new FileOutputStream(savefile)。
•经过FileOutputStream类对象将数据流写入到文件中。
fos.write(byte[] bytes)。
☆☆☆•5.使用File类来读取SD卡文件。
•使用File类的构造函数设置SD卡文件,并指明路径和名称。
File readfile=new File(String dir, String filename)。
•建立FileInputStream类对象来绑定File对象。
FileInputStream fis= new FileOutputStream(readfile)。
•经过FileInputStream类对象将数据流写入到文件中。
定义一个byte[] 数组,用来存放读取的二进制数据流。
使用fis.read(byte[] bytes)的方法,从文件读取二进制数据流。
将二进制数据转化为原有的数据类型。
☆☆☆Android Studio实现SharedPreferences存储数据和文件File存储数据。
1.打开Android Studio,新建工程后,在activity_main.xml中,创建4个Button,2个Plain Text。

xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
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="lession.example.com.androidlession4_10_3.MainActivity">
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:text="name"
android:ems="10"
android:id="@+id/editText" />
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:text="pwd"
android:ems="10"
android:id="@+id/editText2" />
android:text="sp_save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button" />
android:text="sp_load"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button2" />
android:text="data_save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button3" />
android:text="data_load"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button4" />
2.在MainActivity.java中,编写相关代码。
package lession.example.com.androidlession4_10_3;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class MainActivity extends AppCompatActivity {
SharedPreferences msp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
msp = getSharedPreferences("myfile", Context.MODE_PRIVATE);
final EditText ed_name = (EditText) findViewById(R.id.editText);
final EditText ed_pwd = (EditText) findViewById(R.id.editText2);
Button bt_sps = (Button) findViewById(R.id.button);
Button bt_spl = (Button) findViewById(R.id.button2);
Button bt_datas = (Button) findViewById(R.id.button3);
Button bt_datal = (Button) findViewById(R.id.button4);
bt_sps.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor mEdt = msp.edit();
mEdt.putString("name",ed_name.getText().toString());
mEdt.putString("pwd",ed_pwd.getText().toString());
mEdt.commit();
}
});
bt_spl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ed_name.setText(msp.getString("name",null));
ed_pwd.setText(msp.getString("pwd",null));
}
});
bt_datas.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
FileOutputStream mfos = openFileOutput("datafile",MODE_PRIVATE);
String st = ed_name.getText().toString();
byte[ ] buffer = st.getBytes();
mfos.write(buffer);
mfos.flush();
mfos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
});
bt_datal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
FileInputStream mfis = openFileInput("datafile");
int len = mfis.available();
byte[ ] buffer = new byte[len];
mfis.read(buffer);
String st = new String(buffer);
ed_pwd.setText(st);
}catch (Exception e){
e.printStackTrace();
}
}
});
}
}
运行结果:
SharedPreferences存储数据:
输入任意姓名和密码,点击SP_SAVE,清除文本框中内容后,点击SP_LOAD,输入的姓名和学号又会显示出来。

打开Tools —> Android —> Android Device Monitor,找到myfile。
注:若是打开Android Device Monitor没有目录树,请参考个人另外一篇博客,连接:https://blog.csdn.net/weixin_43468667/article/details/90214551

导出,打开内容以下:

文件File存储数据:
在第一个文本框输入任意字符,点击DATA_SAVE,点击DATA_LOAD,在第二个文本框显示出来。

打开Tools —> Android —> Android Device Monitor,找到datafile。

导出,打开内容以下:

☆☆☆Android Studio实现文件SDCard存储数据。
1.打开Android Studio,新建工程后,在AndroidMainfest.xml中添加权限。
package="lession.example.com.androidlession417">
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
2.在activity_main.xml中,创建3个Button,1个ListView。

xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
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="lession.example.com.androidlession417.MainActivity">
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:text="sd_save"
android:textAllCaps="false"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button" />
android:text="sd_load"
android:textAllCaps="false"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button2" />
android:text="sd_dir"
android:textAllCaps="false"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button3" />
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listView" />
3.在MainActivity.java中,编写相关代码。
package lession.example.com.androidlession417;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class MainActivity extends AppCompatActivity {
// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE};
public static void verifyStoragePermissions(AppCompatActivity activity) {
int permission = ActivityCompat.checkSelfPermission(activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bt_sdsave = (Button) findViewById(R.id.button);
Button bt_sdsload = (Button) findViewById(R.id.button2);
Button bt_sddir = (Button) findViewById(R.id.button3);
final ListView lv = (ListView) findViewById(R.id.listView);
verifyStoragePermissions(this);
bt_sdsave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
File path = Environment.getExternalStorageDirectory();
String st = "我要写入的文件的内容!";
File saveFile = new File(path,"mySDfile");
try {
FileOutputStream mfos = new FileOutputStream(saveFile);
mfos.write(st.getBytes());
mfos.flush();
mfos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
});
bt_sdsload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
File path = Environment.getExternalStorageDirectory();
String st;
File loadFile = new File(path,"mySDfile");
try{
FileInputStream mfis = new FileInputStream(loadFile);
int len = mfis.available();
byte[] buffer = new byte[len];
mfis.read(buffer);
st = new String(buffer);
Toast.makeText(MainActivity.this,
"文件内容:"+st,Toast.LENGTH_LONG).show();
}catch (Exception e){
e.printStackTrace();
}
}
});
/*遍历SD卡中目录及文件的方法:
经过建立File[]数组类型对象获取
File[] files=new File(filepath).listFiles();
使用ListView控件来显示目录
使用ArrayAdapter将目录中的信息,绑定到ListView中显示
使用ListView控件的点击事件,来进入选中的目录
主要函数实现:
获取选定文件夹中的文件列表
将文件列表显示到到ListView中*/
bt_sddir.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
File path = Environment.getExternalStorageDirectory();
File[] mFs = new File(path.toString()).listFiles();
ArrayAdapter mAda = new ArrayAdapter
(MainActivity.this,android.R.layout.simple_list_item_1,mFs);
lv.setAdapter(mAda);
}
});
}
}
运行结果:
点击ALLOW

实现SD卡文件的读写:
点击sd_save,而后点击sd_load显示保存的内容
实现遍历SD卡中目录及文件:
点击sd_dir,ListView显示内容

打开Tools —> Android —> Android Device Monitor,找到对应文件。

导出,打开内容以下:

这就是SharedPreferences存储数据和文件存储数据的使用,若是转载以及CV操做,请务必注明出处,谢谢!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)