今天学习了有关外存的读写的知识,其中包含很多的方法:
activity_main.xml
<LinearLayout 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.example.aa.MainActivity" android:orientation="vertical" > <EditText android:id="@+id/username" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入用户名..." /> <EditText android:id="@+id/password" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入密码..." /> <CheckBox android:id="@+id/select" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="记住密码" /> <Button android:id="@+id/login" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="登陆" android:onClick="click" /> </LinearLayout>
MainAcitivity.java
package com.example.aa; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.os.Environment; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends ActionBarActivity { //设置全局变量 EditText et_username; EditText et_password; CheckBox cb; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_username=(EditText) findViewById(R.id.username); et_password=(EditText) findViewById(R.id.password); cb=(CheckBox) findViewById(R.id.select); //设置read()方法,利于调用方法 try { read(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } //read()方法进行回写,通过返回主页面,通过程序可以看到登录的信息,例:看到刚输入的用户名和密码 public void read() throws Exception{ File file=new File("sdcard/info.txt"); BufferedReader br;//字符输出流 try {//InputStreamReader用于读取文本文件 br=new BufferedReader(new InputStreamReader(new FileInputStream(file))); String info=br.readLine();// readLine()是读取流读数据的时候用的,同时会以字符串形式返回这一行的数据 String infos[]=info.split(",");//将字符串的信息用逗号隔开 et_username.setText(infos[0]);//将infos[0]的信息传递给et_username et_password.setText(infos[1]);//将infos[1]的信息传递给et_password } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void click(View v) throws Exception{ //得到用户名和密码中的信息 String username=et_username.getText().toString(); String password=et_password.getText().toString(); //判断点击是否成功 if(cb.isChecked()){ //查询的文件路径 File file=new File("sdcard/info.txt"); //利用输出流输出文件 FileOutputStream fos=new FileOutputStream(file); //将字符串转换成字节数组 fos.write((username+","+password).getBytes()); //关闭输出流 fos.close(); } //跳出弹框,判断是否登录成功 Toast.makeText(this, "登陆成功", 0).show(); } }
上面的代码是对于用户名中不加逗号的用户,如果用户名中使用逗号或其他字符,代码应改为
public void click(View v) throws Exception{ //得到用户名和密码中的信息 String username=et_username.getText().toString(); String password=et_password.getText().toString(); //判断点击是否成功 if(cb.isChecked()){ //1.拿到SharedPreferences的对象 功能:以键值对的形式存储零散数据 SharedPreferences sp=getSharedPreferences("info", MODE_PRIVATE); //2.拿到编辑器 Editor et=sp.edit(); //3.封装内容 et.putString("name", username); et.putString("pass", password); et.commit(); }
//read()方法进行回写,通过返回主页面,通过程序可以看到登录的信息,例:看到刚输入的用户名和密码 public void read() { SharedPreferences sp=getSharedPreferences("info", MODE_PRIVATE); String username=sp.getString("name", ""); //以string的形式获取username对象指定行中指定列的值 String password=sp.getString("pass", ""); et_username.setText(username); //将username的值传递给et_username et_password.setText(password); }