SharedPreferences轻量级数据存储(用户名、密码等等)
通过SharedPreferences来读,通过SharedPreferences.Editor来做编辑
在一个类需要声明SharedPreferences与SharedPreferences.Editor并获得他们的实例:
private SharedPreferences mSharedPreferences;
private SharedPreferences.Editor mEditor;
mSharedPreferences=getSharedPreferences("data",MODE_PRIVATE);//括号中文件名称与模式
mEditor=mSharedPreferences.edit();
模式通常使用MODE_PRIVATE(只有本应用可读写)
随后在写和读的按钮的监听事件中分别写出想要实现的功能
//把文本保存起来
mEditor.putString("name",etname.getText().toString());//获得文本
mEditor.apply();//commit同步存储
tvcontent.setText(mSharedPreferences.getString("name",""));
下面是运行之后的样子
以下是存储后生成的文件,有权限可以下载存储,下面这个也属于内部存储
file文件存储(内部与外部)
一、file内部存储
FileOutputStream用来存储数据
FileInputStream用来读取数据
先写两个方法:save与read
不用太担心try{}catch,在写语句的过程中抛出异常可自动生成
private final String mFileName = "text.txt";
private void save(String content) {
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = openFileOutput(mFileName, MODE_PRIVATE);
fileOutputStream.write(content.getBytes());//获取content
} catch (IOException e) {
e.printStackTrace();
} finally {
//close可能会造成空指针异常
if (fileOutputStream != null) {
try {
fileOutputStream.close();//不要忘记关闭(close)
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//用来读取数据
private String read() {
FileInputStream fileInputStream=null;
try {
fileInputStream = openFileInput(mFileName);
byte[] buff = new byte[1024]; //每次读取1024个字节
StringBuilder sb = new StringBuilder(); //用来拼接字符串
int len = 0;
while ((len = fileInputStream.read(buff)) > 0) {
//拼接
sb.append(new String(buff, 0, len));
}
return sb.toString();//一般情况下返回这个
} catch (IOException e) {
e.printStackTrace();
}finally {
if (fileInputStream!=null){
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
再在点击事件中调用即可
switch (v.getId()) {
case R.id.btn_save:
save(etname.getText().toString());//保存调用方法
break;
case R.id.btn_show:
tvcontent.setText(read());
break;
}
二、file外部存储
// fileOutputStream = openFileOutput(mFileName, MODE_PRIVATE);
//寻找文件夹skypan
File dir=new File(Environment.getExternalStorageDirectory(),"skypan");
//如果kaypan文件夹不存在就新建
if (!dir.exists()){
dir.mkdir();//mkdirs可以新建一系列如sypan/a/b
}
File file=new File(dir,mFileName);
//如果文件夹不存在就新建
if (!file.exists()){
file.createNewFile();
}
fileOutputStream=new FileOutputStream(file);
// fileInputStream = openFileInput(mFileName);
//在getExternalStorageDirectory().getAbsolutePath()+File.separator+"skypan"路径下
File file=new File(Environment.
getExternalStorageDirectory().getAbsolutePath()+File.separator
+"skypan",mFileName);
fileInputStream=new FileInputStream(file);
compileSdkVersion是23及以上的话或许需要动态获取权限
在你的MainActivity中写道
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
想要在sb卡写与读需要在androidmanifest.xml中加上
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />