轻量级存储
image.png
使用Activity类的getSharedPreferences方法获得SharedPreferences对象,其中存储key-value的文件的名称由getSharedPreferences方法的第一个参数指定。
获取SharedPreferences对象
SharedPreferences settings = getSharedPreferences(fileName, mode);
获得Editor对象
SharedPreferences.Editor ed = settings.edit();
可以用下面两种
getCacheDir()方法用于获取/data/data//cache目录
getFilesDir()方法用于获取/data/data//files目录
文件
package com.example.fragment_text2;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import android.app.Activity;
import android.app.FragmentManager;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
Fragment_text fragment_text;
Fragment_text fragment_text2;
private FragmentManager manager;
private SharedPreferences preferences;
Context ss = MainActivity.this;// 给上下文赋值;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
manager = getFragmentManager();// 获取碎片管理者
// 通过碎片管理者通过id来指定fragment控件.然后赋值给了Fragment_text碎片类,
// 然后就可以调用碎片类的方法了
fragment_text = (Fragment_text) manager.findFragmentById(R.id.fragment);
// 通过tag指定
fragment_text2 = (Fragment_text) manager
.findFragmentByTag("tastfragment");
// 建一个text.xml文件,里面都是键值对,参数1是文件名,参数2是创建的方式
preferences = getSharedPreferences("text", Context.MODE_PRIVATE);
}
// public void dian(View v){
// 不能new,因为不会走生命周期方法,会报空指针错误
// 静态添加的碎片生命周期在创建布局时已经走了一遍
// Fragment_text text = new Fragment_text();
// text.settext("我去找你");
// }
// 不能new没有(布局里没有) 那只能用=已有(布局里有)
public void dian(View v) {
fragment_text.settext("我去找你");
fragment_text2.settext("来呗");
}
// 存储
public void ok(View v) {
// -----------------方法1preferences----------------------
Editor edit = preferences.edit();// 开启一个Editor的事件
edit.putString("test", fragment_text.gettext());// 传值
edit.commit();// 提交事务
// ----------------方法2ss--------------------
try {
//通过上下文调openFileOutput方法
// 建一个tess文件,参数1是文件名,参数2是创建的方式
FileOutputStream data = ss.openFileOutput("tess",
Context.MODE_PRIVATE);//返回一个FileOutputStream字节输出流
data.write("你好".getBytes());// 写一个字符然后转换byte子节
data.close();// 关闭资源
} catch (Exception e) {
e.printStackTrace();
}
}
// 读取
public void ll(View v) {
// -----------------方法1----------------------
// getString获取指定参数1的数值
String string = preferences.getString("test", "");
fragment_text.settext(string);
// -----------------方法2---------------------------
try {
//openFileInput参数是指定文件
//返回一个FileInputStream字节输入流
FileInputStream input = ss.openFileInput("tess");
byte[] b = new byte[1024];//接受数据的
int i = input.read(b);// read方法把input值存储到b数组中
String string2 = new String(b, 0, i);// 截取String,b组从0下表开始,到i结束;
fragment_text2.settext(string2);
input.close();// 释放资源
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
文件区别
这两种的区别一个是xml文件一个是文件,
存储类型区别
第一种只能存储八大基本类型用map集合
第二种存储的是字节
调用方法区别
第1种通过获得getSharedPreferences("text", Context.MODE_PRIVATE);来新建
第二种通过上下文.openFileOutput("tess",Context.MODE_PRIVATE);来新建
储存位置区别
第一种目录是data/data/项目包名.../shared_prefs
第二种目录是data/data/项目包名.../files
SD卡进行操作时要获得权限
代码SD写
// 使用SD卡存储要判断SD是否安装上挂载上 注要获得对SD卡的操作权限
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
// 获取SDCard目录
File sdCardDir = Environment.getExternalStorageDirectory();
File saveFile = new File(sdCardDir, "test.txt");
try {
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write("Hello World!".getBytes());
outStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
SD读
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
File sdCardDir = Environment.getExternalStorageDirectory();
File saveFile = new File(sdCardDir, "test.txt");
try {
FileInputStream outStream = new FileInputStream(saveFile);
byte b[]=new byte[1024];
int i = outStream.read(b);
String string = new String(b,0,i);
fragment_text.settext(string);
outStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
内部文件、外部文件的读写
SharedPreferences的读写