Android攻城狮数据存储之文件存储

数据篇——文件存储
-- 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 }

 







posted @ 2017-04-18 22:08  张兮兮  阅读(157)  评论(0编辑  收藏  举报