微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android开发笔记二十一——数据存储之文件存储

文件存储是利用Java的I/O流来实现向Android硬件磁盘上进行读写的操作。

Android存储概念

内部存储 Internal Storage :不可更改的,随着应用的卸载被删除

内部存储的特点:

  • 认只能被创建它的应用访问到
  • 当这个应用卸载后,内部存储中的文件也被删除
  • 一旦内部存储空间耗尽,手机也就无法使用

/data/data/<applicationId>/shard_prefs

/data/data/<applicationId>/databases

/data/data/<applicationId>/files

/data/data/<applicationId>/cache

这四个文件夹都是属于内部存储。

前两个文件是通过系统提供的类和方法来获得文件内容

后两个文件是通过 context.getCacheDir()context.getFilesDir() 这两个方法来得到。

外部存储 External Storage :可更改的。分为公有目录和私有目录,

公有目录:通过 Environment.getExternalStoragePublicDirectory(int type) 方法来获得公有目录下对应类型的文件

私有目录:随着应用的卸载被删除
/mnt/sdcard/data/data/<applicationId>/files

/mnt/sdcard/data/data/<applicationId>/cache

File内部存储

比较重要的两个类: FileOutputStreamFileInputStream

代码示例
FileActivity的java文件

public class FileActivity extends AppCompatActivity {

    private EditText mEtName;
    private Button mBtnSave,mBtnShow;
    private TextView mTvContent;

    private final String mFinalName = "text.txt";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_file);

        mEtName=findViewById(R.id.et_name);
        mBtnSave=findViewById(R.id.btn_save);
        mBtnShow=findViewById(R.id.btn_show);
        mTvContent=findViewById(R.id.tv_content);



        mBtnSave.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                save(mEtName.getText().toString().trim()); //trim()表示去除前后空格,没有也可以
            }
        });

        mBtnShow.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mTvContent.setText(read());
            }
        });
    }

    //存储数据
    private void save(String content){
        FileOutputStream fileOutputStream=null;
        try {
            //创建存储目标
            fileOutputStream = openFileOutput(mFinalName,MODE_PRIVATE);
            //字节方式存储方法
            fileOutputStream.write(content.getBytes());
        } catch (IOException e) {
            e.printstacktrace();
        } finally {
            //关闭流
            if (fileOutputStream!=null) {
                try {
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printstacktrace();
                }
            }
        }
    }

    //读取数据
    private String read(){
        FileInputStream fileInputStream = null;
        try {
            //获取读取文件
            fileInputStream = openFileInput(mFinalName);
            //设置一次读取字节数
            byte[] buff = new  byte[1024];
            //获取StringBuilder,实现字符串拼接
            StringBuilder sb = new StringBuilder("");
            int len = 0;
            //循环读取
            while ((len = fileInputStream.read(buff)) > 0){
                sb.append(new String(buff,0,len));
            }
            //返回读取数据
            return sb.toString();
        } catch (IOException e) {
            e.printstacktrace();
        } finally {
            //关闭流
            if (fileInputStream!=null) {
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    e.printstacktrace();
                }
            }
        }
        return null;
    }
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="15dp">
    <EditText
        android:id="@+id/et_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入内容"
        />
    <Button
        android:id="@+id/btn_save"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="保存"
        android:layout_marginTop="10dp"
        />
    <Button
        android:id="@+id/btn_show"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="显示"
        android:layout_marginTop="10dp"
        />
    <TextView
        android:id="@+id/tv_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        />
</LinearLayout>

运行效果

总结

存储数据:

读取数据:

File外部存储

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐