Android 存储:Internal Storage的用法以及与External storage 的区别

本文介绍了如何在Android应用中将不允许修改的文件保存在res/raw目录,以及如何使用InputStream处理这些文件。同时讲解了如何利用getCacheDir方法管理缓存文件,以及注意事项如缓存大小控制和清理。最后提到系统的自动删除机制和文件流操作示例。
摘要由CSDN通过智能技术生成

如果想在编译时就在应用程序中保存一个不允许修改的文件,就把这个文件保存在/res/raw/目录下。

在程序中打开这个文件可以调用openRawResource(int id)方法, 里面的参数id表示R.raw.,

这个方法打开后会返回一个InputStream,使用它可以读取这个文件。这个文件不能被执行写入操作。

如果有缓存文件需要保存,而这些文件并不需要永久保存,可以调用getCacheDir()方法,

该方法执行后会在内部存储器的/data/data//目录下创建一个名为cache/的空目录(或打开cache/目录),

并返回一个File对象指向这个(空)文件夹。在这个cache/目录下,可以保存缓存文件,

当设备的内部存储器空间不够用时,系统会自动删除一部分cache/目录下的缓存文件,但为了保证系统运行效率,

应该手动对cache/目录的大小进行控制,如控制它不能大于1M。当用户卸载应用程序时,cache/目录会连同一起被删除。

例:调用getCacheDir()方法,该方法执行后会在内部存储器的/data/data//目录下创建一个名为cache/的空目录。

利用一个登录界面演示,java代码如下

===================

InternalDataWriteActivity:


public class InternalDataWriteActivity extends AppCompatActivity {

private Button mLoginBtn;
private EditText mUsernameET, mPasswordET;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_shared_preferences_write);
    initViews();
    mLoginBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String username = mUsernameET.getText().toString();// 获得用户名
            String password = mPasswordET.getText().toString();// 获得密码
            FileOutputStream fos = null;
            try {
                fos = openFileOutput("login", MODE_PRIVATE);// 获得文件输出流
                fos.write((username + " " + password).getBytes());// 保存用户名和密码
                fos.flush();// 清除缓存
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (fos != null) {
                    try {
                        fos.close();// 关闭文件输出流
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            Intent intent = new Intent();// 创建Intent对象
            // 指定跳转到SharedPreferencesReadActivity
            intent.setClass(InternalDataWriteActivity.this, InternalDataReadActivity.class);
            startActivity(intent);// 实现跳转
        }
    });
}
private void initViews() {
    mLoginBtn = (Button) findViewById(R.id.btn_login);
    mUsernameET = (EditText) findViewById(R.id.et_username);
    mPasswordET = (EditText) findViewById(R.id.et_password);
}

}

InternalDataReadActivity:


public class InternalDataReadActivity extends AppCompatActivity {

private TextView mUsernameTV,mPasswordTV;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_shared_preferences_read);
    initViews();
    FileInputStream fis = null;
    byte[] buffer = null;
    try {
        fis = openFileInput("login");// 获得文件输入流
        buffer = new byte[fis.available()];// 定义保存数据的数组
        fis.read(buffer);// 从输入流中读取数据
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (fis != null) {
            try {
                fis.close();// 关闭文件输入流
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    String data = new String(buffer);// 获得数组中保存的数据

《960全网最全Android开发笔记》

《379页Android开发面试宝典》

《507页Android开发相关源码解析》

因为文件太多,全部展示会影响篇幅,暂时就先列举这些部分截图

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

为文件太多,全部展示会影响篇幅,暂时就先列举这些部分截图

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值