数据篇——文件存储
-- Activity的openFileOutput()方法可以用于把数据输出到文件中
-- 创建的文件保存在 /data/data/<package name>/files 目录
-- 实现过程与在 Java 中保存数据到文件中是一样的
new File("/mnt/sdcard/test"); 路径指向安卓自带的目录,指向SD卡。
new File("/mnt/extsdcard/test"); 指向外存储卡,但模拟器并没有这个。
如果想要往文件中写入数据,需要相关的权限,不加权限是会报错的。
在AndroidMainfest.xml 中加入权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
File file = this.getFilesDir(); // 获取文件目录,这个目录是当前应用程序默认的数据存储目录
Log.i("info",file.toString());
----------
File file = this.getCacheDir(); //这个目录是当前应用程序默认的缓存文件的存放位置
Log.i("info",file.toString());
一些不是非常重要的文件可以通过这种方法创建、使用;
如果手机的内存不足的时候,系统会自动去删除App的chche目录的数据。
-------------------
File file = this.getDir("imooc",MODE_PRIVATE);
Log.i("info",file.toString());
------------------
权限
MODE_PRIVATE
- 为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容。
MODE_APPEND
- 模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE
- 用来控制其他应用是否有权限读写该文件
MODE_WORLD_READABLE
- 表示当前文件可以被其他应用读取
MODE_WORLD_WRITEABLE
- 表示当前文件可以被其他应用写入
-----------------
外部文件
this.getExternalFilesDir(type);
-----------------
可以得到外部的存储位置,该位置的数据跟内置是使用是一样的;
优点:如果App卸载了,这里面的数据也会自动清除干净,没有残留
File file = this.getExternalCacheDir();
Log.i("info",file.toString());
注意:如果开发者不遵守规则,没有把数据放入 data/data/<包名> 或者 /mnt/sdcard/Android/data/<包名>,那么,卸载之后数据将不会自动清除,将会造成很多垃圾数据。
数据篇——File
开启输入流:
Android中文件存储的操作:
Activity提供了 openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在Java中保存数据到文件中是一样的。
创建的文件保存在/data/data/<package name>/files目录
openFileOutput(fileName,MODE):第一个参数是文件的名字,第二个参数是权限,权限可以叠加的。
如果希望文件被其他应用读和写,可以传入:
MODE_WORLD_READABLE + MODE_WORLD_WRITEABLE,也就是说,权限是可以合理地叠加在一起。
------------------
当应用程序在安装时,系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。默认情况下,任何应用创建的文件,sharedpreferences,数据库应该都是私有的(位于/data/data/<package name>/files),其他程序无法访问。除非在创建时指定了MODE_WORLD_READABLE 或者 MODE_WORLD_WRITEABLE。
1 public class MainActivity extends ActionBarActivity {
2 EditText editText;
3 Button button;
4 TextView textView;
5
6 @Override
7 protected void onCreate(Bundle savedInstanceState) {
8 super.onCreate(savedInstanceState);
9 setContentView(R.layout.fragment_main);
10 editText = (EditText) findViewById(R.id.editText1);
11 button = (Button) findViewById(R.id.button1);
12 textView = (TextView) findViewById(R.id.textView1);
13 button.setOnClickListener(new OnClickListener() {
14
15 @Override
16 public void onClick(View v) {
17 // TODO Auto-generated method stub
18 WriteFile(editText.getText().toString());
19 textView.setText(readFile());
20 }
21 });
22 }
23
24 // 保存文件内容
25 public void WriteFile(String content) {
26
27 FileOutputStream fos;
28 try {
29 fos = openFileOutput("a.txt", MODE_PRIVATE);
30 fos.write(content.getBytes());
31
32 fos.close();
33 } catch (IOException e) {
34 // TODO Auto-generated catch block
35 e.printStackTrace();
36 }
37
38 }
39
40 // 读取文件内容
41
42 public String readFile() {
43 String content = null;
44
45 try {
46 FileInputStream fis = openFileInput("a.txt");
47 ByteArrayOutputStream baos = new ByteArrayOutputStream();
48 byte[] buffer = new byte[1024];
49 int len = 0;
50 while ((len = fis.read(buffer)) != -1) {
51 baos.write(buffer, 0, len);
52 }
53 content = baos.toString();
54 fis.close();
55 baos.close();
56 } catch (IOException e) {
57 // TODO Auto-generated catch block
58 e.printStackTrace();
59 }
60
61 return content;
62 }
63 }