在内、外部存储中读写数据

Android的存储


仅供个人学习以备忘,如有帮助,不胜荣幸!!

内部存储空间

  • RAM内存:运行内存
  • ROM内存:存储内存

外部存储空间

  • SD卡:类似于移动硬盘
    • 2.2之前sd卡路径:sdcard
    • 4.3之前sd卡路径:mnt/sdcard
    • 4.3开始sd卡路径:storage/sdcard

这三个路径在写程序时都可以用


内部存储读写代码示例:


public class MainActivity extends AppCompatActivity {

    private EditText et_name;
    private EditText et_password;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取两个文本输入框
        et_name = (EditText)findViewById(R.id.et_name);
        et_password = (EditText)findViewById(R.id.et_pw);
        //读取本地文件中的已保存用户名和密码数据
        readAccount();
    }

    //创建读取本地帐户资料的方法
    public void readAccount(){
        //File file = new File("data/data/com.wangy.a02_/info.txt");与下一行代码功能相同
        //File file = new File(getFilesDir(),"info.txt");通过getFilesDir()获取路径,并创建名为files的文件夹
        //通过getCacheDir()获取路径,并创建名为cache的文件夹
        File file = new File(getCacheDir(),"info.txt");
        if(file.exists()) {
            try {
                FileInputStream fis = new FileInputStream(file);

                //使用字节流读取
                //fis.read();

                //使用字符流读取数据
                BufferedReader br = new BufferedReader(new InputStreamReader(fis));
                //读取txt文件里的用户名和密码
                String text = br.readLine();
                //以##为界限进行分割
                String[] s = text.split("##");

                et_name.setText(s[0]);
                et_password.setText(s[1]);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public void login(View v){
        String name = et_name.getText().toString();
        String pass = et_password.getText().toString();
        CheckBox cb = (CheckBox)findViewById(R.id.cb);
        //判断选框是否被勾选
        if(cb.isChecked()){
            //data/data/com.wangy.a02_:内部存储空间的路径
            //File file = new File("data/data/com.wangy.a02_/info.txt");

            //为方便起见,也可以用Google提供的API getFilesDir()获取路径,会创建一个名为files的文件夹,会永久保存,
            //返回路径为data/data/com.wangy.a02_files
            //File file = new File(getFilesDir(),"info.txt");

            //还可以用API名为getCacheDir(),将数据保存在名为cache的文件里,当设备内存不足时会被删除,其返回值为data/data/com.wangy.a02_cache
            File file = new File(getCacheDir(),"info.txt");

            FileOutputStream fos;
            try {
                fos = new FileOutputStream(file);
                //将用户输入的文本保存到本地
                fos.write((name + "##" + pass).getBytes());
                //关闭数据流
                fos.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        Toast.makeText(this,"登录成功",Toast.LENGTH_SHORT).show();
        System.out.println("登录成功");
    }
}

界面代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.wangy.a02_.MainActivity"
    android:orientation="vertical">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/et_name"
        android:layout_above="@+id/et_pw"
        android:hint="请输入用户名" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/et_pw"
        android:layout_centerInParent="true"
        android:inputType="textPassword"
        android:hint="请输入密码" />
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_below="@+id/et_pw">
        <CheckBox
            android:id="@+id/cb"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="记住用户名和密码"
            android:layout_centerVertical="true"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:text="登录"
            android:onClick="login"/>
    </RelativeLayout>

</RelativeLayout>

界面截图:
这里写图片描述


外部存储跟内部存储相同;不过存储路径改为sdcard/info.text

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值