码迷,mamicode.com
首页 > 其他好文 > 详细

内部存储文件(读)

时间:2015-10-14 11:51:03      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

未进行优化的代码:

实现功能要点:

  1. 当输入用户密码后点击登录时,首先判断是否勾选了复选框,若勾选了,将用户名、密码通过文件写的方法写入到内部存储info.txt中。

  2. 当应用启动后,执行函数readAccount()函数,该函数通过文件读方法(只获取一行)并将该行字符串分割后显示在用户名和密码框中。

代码如下:

package com.swust.intern;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        
        
        //应用启动后,读取存档的用户名和密码
        readAccount();
    }
    public void readAccount(){
        File file =new File("data/data/com.swust.intern/info.txt");
        try{
            FileInputStream fis =new FileInputStream(file);
            //把字节流转化为字符流
            BufferedReader br =new BufferedReader(new InputStreamReader(fis));
            //读取txt文件的用户名和密码
            //读取一行
            String text =br.readLine();
            //使用“##”标识切割,得到字符串数组
            String[] s = text.split("##");
            
            EditText et_name = (EditText) findViewById(R.id.et_name);
            EditText et_pwd  = (EditText) findViewById(R.id.et_pwd);
            et_name.setText(s[0]);
            et_pwd.setText(s[1]);
            
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    public void login(View v){
        EditText et_name = (EditText) findViewById(R.id.et_name);
        EditText et_pwd  = (EditText) findViewById(R.id.et_pwd);
        CheckBox cb      = (CheckBox)findViewById(R.id.cb);
        String name=et_name.getText().toString();
        String pwd =et_pwd.getText().toString();
        //判读复选框是否被勾选
        if(cb.isChecked()){
        //"data/data/com.swust.intern"是内部存储空间路径
            File file =new File("data/data/com.swust.intern/info.txt");
            FileOutputStream fos;
            try{
                fos = new FileOutputStream(file);
                //加“##”是为了读取时好分割
                fos.write((name + "##" +pwd).getBytes());
                fos.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        //System.out.println("登陆成功");
        //创建吐司对话框
        /* 第一个参数上context,而activity本来就是context的子类,所以直接填this*/
        /*第三个参数为持续显示时间,只有LENGTH_SHORT(2S)和LENGTH_LONG(5s)两种选择*/
        /*Toast t= Toast.makeText(this, "登陆成功", Toast.LENGTH_SHORT);
        //显示吐司对话框
        t.show();*/
        
        Toast.makeText(this, "登陆成功", Toast.LENGTH_SHORT).show();
    }
}

当然,有缺点:

第一,代码不够优化,findById方法实现多次,应该使用全局变量来解决。

第二,逻辑漏洞,1.当该应用第一次启动时,是无法读取账号密码的

                      2.当用户在之后的某一次不选择记住账户名和密码,那么应该将txt文件清空,而不是之前的旧账号密码

优化解决(代码优化和第一次启动判断文件存在):

package com.swust.intern;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

    private EditText et_name;
    private EditText et_pwd;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //已经是全局变量,应用启动时获取ID
        et_name = (EditText) findViewById(R.id.et_name);
        et_pwd = (EditText) findViewById(R.id.et_pwd);
        
        //应用启动后,读取存档的用户名和密码
        readAccount();
    }
    public void readAccount(){
        File file =new File("data/data/com.swust.intern/info.txt");
      

//判读文件是否存在
if(file.exists()){
try{
FileInputStream fis =new FileInputStream(file);
//把字节流转化为字符流
BufferedReader br =new BufferedReader(new InputStreamReader(fis));
//读取txt文件的用户名和密码
//读取一行
String text =br.readLine();
//使用“##”标识切割,得到字符串数组
String[] s = text.split("##");


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

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

 
  
    }
    public void login(View v){
        
        CheckBox cb      = (CheckBox)findViewById(R.id.cb);
        String name=et_name.getText().toString();  //直接使用
        String pwd =et_pwd.getText().toString();
        //判读复选框是否被勾选
        if(cb.isChecked()){
        //"data/data/com.swust.intern"是内部存储空间路径
            File file =new File("data/data/com.swust.intern/info.txt");
            FileOutputStream fos;
            try{
                fos = new FileOutputStream(file);
                //加“##”是为了读取时好分割
                fos.write((name + "##" +pwd).getBytes());
                fos.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        //System.out.println("登陆成功");
        //创建吐司对话框
        /* 第一个参数上context,而activity本来就是context的子类,所以直接填this*/
        /*第三个参数为持续显示时间,只有LENGTH_SHORT(2S)和LENGTH_LONG(5s)两种选择*/
        /*Toast t= Toast.makeText(this, "登陆成功", Toast.LENGTH_SHORT);
        //显示吐司对话框
        t.show();*/
        
        Toast.makeText(this, "登陆成功", Toast.LENGTH_SHORT).show();
    }
}

 

内部存储文件(读)

标签:

原文地址:http://www.cnblogs.com/shuqingstudy/p/4876798.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!