Android应用程序存储数据的5种方式:
a、保存到文件(IO流)
b、SQLite数据库
c、内容提供者
d、sharedproferrences保存数据
e、网络
文件存储路径一般分2个:应用目录下和SD卡中;
1.应用目录:data/data/包名
一. 应用目录下文件的写入、修改、读取、删除
内存中主要分为2类,普通文件和缓存文件,Android提供了API来获取这两个路径
(1)文件目录:
getApplicationContext().getFilesDir();
//data/data/包名/files ,应用删除时文件夹下内容也被删除
(2)缓存目录:
getApplicationContext().getCacheDir()
// data/data/包名/cache ,缓存路径,当内存不足时,会删除
1.应用程序的目录下files路径下文件的写入、读取、删除
(1)写入files路径下
try {
//a.生成文件夹路径
File file = getActivity().getApplicationContext().getFilesDir();
//data/data/应用报名/files
file = new File(file+"aa");
if (!file.exists()) {
file.mkdirs();
}
//b.生成文件
file = new File(file, "1.txt");
FileOutputStream stream = new FileOutputStream(file);
String msg = "这是通过IO流写到手机中的数据";
//c.写入文件
stream.write(msg.getBytes());
stream.flush();
stream.close();
} catch (Exception e) {
e.printStackTrace();
}
效果:
注意:
一、添加权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
二、 如果文件目录存在的话,会写入失败,所以先要判断路径是否存在,如果不存在,创建文件路径,注意不包括文件
file.makdirs() 如果file为“/aa/b.txt”则会创建一个b.txt的文件夹
(2)从file路径下读取文件
TextView tv = (TextView) findViewById(R.id.tv);
File fileDir = getApplicationContext().getFilesDir();
fileDir = new File(fileDir+"/function1","1.txt");
try {
FileReader fileReader =new FileReader(fileDir);
BufferedReader reader = new BufferedReader(fileReader);
String readLine = reader.readLine();
tv.setText(readLine);
} catch (Exception e) {
e.printStackTrace();
}
2.应用程序的目录下cache路径下文件的写入、读取、删除.
和files路径下文件的写入、读取、删除一样,只是路径不同
getApplicationContext().getCacheDir()
3.存储到SD卡(重点)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
tv = (TextView) rootView.findViewById(R.id.tv);
return rootView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
String state = Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED.equals(state)){
try {
File file = new File(Environment.getExternalStorageDirectory(),"info.txt");
FileOutputStream inputStream = new FileOutputStream(file);
inputStream.write("写到SD卡中的内容".getBytes());
inputStream.flush();
inputStream.close();
Toast.makeText(getActivity(), "保存成功", 0).show();
} catch (Exception e) {
e.printStackTrace();
}
}
tv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
File file = new File(Environment.getExternalStorageDirectory(),"info.txt");
try {
FileReader reader = new FileReader(file);
BufferedReader reader2 = new BufferedReader(reader);
String readLine = reader2.readLine();
tv.setText(readLine);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}