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 }