zoukankan      html  css  js  c++  java
  • 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 }







  • 相关阅读:
    POJ 1795 DNA Laboratory
    CodeForces 303B Rectangle Puzzle II
    HDU 2197 本源串
    HDU 5965 扫雷
    POJ 3099 Go Go Gorelians
    CodeForces 762D Maximum path
    CodeForces 731C Socks
    HDU 1231 最大连续子序列
    HDU 5650 so easy
    大话接口隐私与安全 转载
  • 原文地址:https://www.cnblogs.com/my334420/p/6730825.html
Copyright © 2011-2022 走看看