安卓数据在外存中保存与读取

本文介绍了安卓开发中如何进行数据的保存和读取操作,利用外部存储空间如SD卡,详细阐述了创建文件夹、写入数据到文件及从文件读取数据的步骤,特别适用于应用启动时恢复上次登录信息的场景。
摘要由CSDN通过智能技术生成

安卓数据在外存中的保存与读取

    安卓开发中,必不可少的就是数据的保存与读取,安卓手机中的SD卡就是外部存储空间。

数据保存

    我在第一个安卓项目中加入了安卓数据的保存与读取。

    		//把用户名和密码存储到外存中
    		File sdCard = Environment.getExternalStorageDirectory();
    		File directory = new File(sdCard.getAbsolutePath()+"/amyandroidtest");
    		directory.mkdirs();
    		File file = new File(directory,"textfile.txt");
    		try{
    			FileOutputStream fos = new FileOutputStream(file);
    			OutputStreamWriter osw = new OutputStreamWriter(fos);
    			osw.write(username+" "+password);
    			osw.flush();
    			osw.close();
    			Toast.makeText(getApplicationContext(), "用户名已写入内存", Toast.LENGTH_SHORT).show();

    第一句获取系统外存空间地址

    第二句创建目标文件夹

    第三句检测是否是否存在该文件夹,如果没有就创建文件夹

    第四句创建目标文档,用于存储和读取数据

    try后面就是创建输出流,把数据写入目标文件中去了





这就是目标文件与文件夹内容。


读取数据


    我的需求是在从第二次开始的每一次打开app都把上一次成功登录的用户名和密码读出然后写到app的用户名和密码上。

    前面提到了app的生命周期,onCreate()一般用于实例化对象、只执行一次,也是第一个执行的生命周期方法,所以在里面写读取数据的代码。

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        File sdCard = Environment.getExternalStorageDirectory();
        File directory = new File(sdCard.getAbsolutePath()+"/amyandroidtest");
        File targetFile = new File(directory.getAbsolutePath()+"/textfile.txt");
        if( targetFile.exists() ){
        	try{
        		FileInputStream fis = new FileInputStream(targetFile);
        		InputStreamReader isr = new InputStreamReader(fis);
        		char[] content = new char[(int) targetFile.length()];
        		String psw = new String();
        		isr.read(content);
        		isr.close();
        		int flag = 0;
        		for(int i=0;i<targetFile.length();i++){
        			if( content[i] == ' ' ){
        				flag = i+1;
                    	EditText etun = (EditText) findViewById(R.id.username_input);
                    	etun.setText(content, 0, i);
        			}
        			psw = psw + content[i];
        		}
        		psw = psw.substring(flag, (int)targetFile.length());
        		char[] pswChar = psw.toCharArray();
        		EditText etps = (EditText) findViewById(R.id.password_input);
        		etps.setText(pswChar, 0, pswChar.length);
        	}catch(Exception e){
        		e.printStackTrace();
        	}
        }
    }

    读取数据代码和保存数据基本一致,只是把输出流的out换成输入流的in。

    第二次开始的每一次执行的app就是这样了:


    按一下Go就可以直接登录


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值