保存轻量型数据
/**
* 存储数据
* 1、SharedPreference 轻量型数据
* 本质:Map,键值对,支持数据类型更单一
* 打开模式:MODE_PRIVATE 只有自己的应用可以使用
* MODE_APPEND 追加
* 保存的位置:data/data/包名/shared_prefs/xxx.xml
*/
存储数据
private void save(){//存储数据
//创建SharedPreferences对象 getSharedPreferences(filename,)
SharedPreferences sp= getSharedPreferences("test.text", Context.MODE_PRIVATE);
//借助Editor来存储数据 sp.edit()
SharedPreferences.Editor editor= sp.edit();
//存储editor.putXXX(String,value)
editor.putString("name","张三");
editor.putInt("age",18);
editor.putBoolean("isStu",false);
//提交
editor.apply();//比较推荐,没有返回值
// editor.commit();//有返回值
}
得到数据
private void get(){//获取数据
//创建SharedPreferences对象 getSharedPreferences(filename,)
SharedPreferences sp= getSharedPreferences("test.text", Context.MODE_PRIVATE);
//从sp中获取数据
sp.getString("name","");
sp.getInt("age",0);
}
例子:简单的登录界面展示
public class LoginActivity extends AppCompatActivity {
private EditText nameED,pawED;
private CheckBox remember;
private Button Login;
private SharedPreferences sp;
private static final String SP_LOGIN="login";
private static final String SP_KEY_NAME="name";
private static final String SP_KEY_PWD="pwd";
private static final String SP_KEY_ISREMRMBER="isRemember";
private String yonghu,mima;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
nameED=findViewById(R.id.yonghu);
pawED=findViewById(R.id.mimma);
remember=findViewById(R.id.CB);
Login=findViewById(R.id.BT);
sp=getSharedPreferences(SP_LOGIN,MODE_PRIVATE);
Login.setOnClickListener(new View.OnClickListener() {//点击登录
@Override
public void onClick(View view) {
//登录
yonghu=nameED.getText().toString();
mima =pawED.getText().toString();
if(TextUtils.isEmpty(yonghu)||TextUtils.isEmpty(mima)){//判断用户名和密码是否为空
//不能为空
}else {
saveData(yonghu,mima);
Intent intent=new Intent(LoginActivity.this,HomedActivity.class);
startActivity(intent);
finish();
}
}
});
//回显数据
bindData();
}
private void bindData() {//自动填充数据
boolean isRemember=sp.getBoolean(SP_KEY_ISREMRMBER,false);
remember.setChecked(isRemember);
if (isRemember){
String name=sp.getString(SP_KEY_NAME,"");
String pwd=sp.getString(SP_KEY_PWD,"");
nameED.setText(name);
pawED.setText(pwd);
if(!(TextUtils.isEmpty(name)||TextUtils.isEmpty(pwd))){//判断用户名和密码是否不为空
//不为空直接进
Intent intent=new Intent(LoginActivity.this,HomedActivity.class);
startActivity(intent);
finish();
}
}
}
private void saveData(String name,String pwe) {
if (remember.isChecked()){//是否选中
//保存数据,记住密码的状态
sp.edit().putString(SP_KEY_NAME,name)
.putString(SP_KEY_PWD,pwe)
.putBoolean(SP_KEY_ISREMRMBER,true)//设置密码状态为true记住
.apply();
}else {
//将账号密码置空
sp.edit().putString(SP_KEY_NAME,"")
.putString(SP_KEY_PWD,"")
.putBoolean(SP_KEY_ISREMRMBER,false)//设置密码状态为false没记住
.apply();
}
}
}
文件数据存储
**
* 普通文件的存储
* 内部路径:data/data/<packagename>/files/目录下
* 外部路径:公开路径:storage/emulated/0/...关闭
* 私自路径:storage/emulaed/0/Adndroid/data/包名/...
* getExternalFilesDir(String)
* getExternalCacheDir()
*
* 文件路径:filePath
*
* raw 原生,与drawable的区别,不会压缩
* 图片,普通文件
* 放在res,生成R文件,R.raw.xxx
* 只能读,不能写
* assets 不会压缩
* 与res同级,不能生成到R文件中,只能流来读取
* 与res资源不同的是,可支持子目录
* 只能读,不能写
* html,css,js等
* 流:InputStream,OutputStream
* Reader,Writer
*/
public class FileActivity extends AppCompatActivity implements View.OnClickListener {
private TextView TV;
private ImageView IV;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file);
TV=findViewById(R.id.TV);
IV=findViewById(R.id.IV);
Button button=findViewById(R.id.But1);
Button button1=findViewById(R.id.But2);
button.setOnClickListener(this);
button1.setOnClickListener(this);
Button button3=findViewById(R.id.But3);
Button button4=findViewById(R.id.But4);
button3.setOnClickListener(this);
button4.setOnClickListener(this);
Button button5=findViewById(R.id.But5);
button5.setOnClickListener(this);
Button button6=findViewById(R.id.But6);
button6.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.But1:
//存储数据
writeToFileBtn();
break;
case R.id.But2:
//获取数据
readFromFile();
break;
case R.id.But3:
//外部数据存储
writerToExternal();
break;
case R.id.But4:
//外部文件数据获取
readFromExternal();
break;
case R.id.But5:
//从raw中读取图片
readFromRaw();
break;
case R.id.But6:
readFromAssets();
break;
}
}
private void readFromAssets() {
AssetManager manager=getAssets();
BufferedReader reader=null;
try {
InputStream open = manager.open("aba");
reader=new BufferedReader(new InputStreamReader(open));
String line;
StringBuilder sb=new StringBuilder();
while ((line=reader.readLine())!=null){
sb.append(line);
}
TV.setText(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}finally {
if (reader!=null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@SuppressLint("ResourceType")
private void readFromRaw() {
// IV.setImageResource(R.raw.dome6);//原始的图片设置
InputStream is = getResources().openRawResource(R.raw.dome6);//
Bitmap bitmap = BitmapFactory.decodeStream(is);//从流里面解析图片
IV.setImageBitmap(bitmap);
}
private void readFromExternal() {
File externalCacheDir = getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS);//获取路径
ObjectInputStream ois=null;
try {
ois=new ObjectInputStream(new FileInputStream(new File(externalCacheDir,"stu.dat")));//通过文件路径和名字
Student stu=(Student) ois.readObject();
TV.setText(stu.toString());
Log.d("","======="+stu.toString());
} catch (IOException e) {
e.printStackTrace();
}catch (ClassNotFoundException e) {
e.printStackTrace();
}finally {
if (ois!=null){
try {
ois.close();//结束此流
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private void writerToExternal() {
// File cachDir=getExternalCacheDir();
File externalCacheDir = getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS);//获取路径
ObjectOutputStream oos=null;
try {
oos=new ObjectOutputStream(new FileOutputStream(new File(externalCacheDir,"stu.dat")));
oos.writeObject(new Student("小白",18));//写入数据
} catch (IOException e) {
e.printStackTrace();
}finally {
if (oos!=null){
try {
oos.close();//结束此流
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private void readFromFile() {
FileInputStream fis=null;
BufferedReader bufferedReader=null;
try {
fis=openFileInput("text.txt");//返回FileInputStream对象
bufferedReader=new BufferedReader(new InputStreamReader(fis));
String line;
while ((line=bufferedReader.readLine())!=null){//读取一个文本行,并判断不为空
Log.d("","======="+line);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if (bufferedReader!=null){
try {
bufferedReader.close();//关闭此流
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private void writeToFileBtn() {
FileOutputStream fis=null;
BufferedWriter writer=null;
try {
//MODE_PRIVATE如果文件不存在,可以创建;如果存在,内容覆盖
//MODE_APPEND如果问津不参展,可以创建;如果存在,在文件末尾追加
fis=openFileOutput("text.txt",MODE_PRIVATE);//返回FileOutputStream对象
writer=new BufferedWriter(new OutputStreamWriter(fis));
writer.write("我在海风智云");
writer.newLine();//写入一个分隔符
writer.flush();//刷新缓冲区
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}finally {
if (writer!=null){
try {
writer.close();//关闭此流
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}