Android 2 创建一个登陆页面 并实现文件的读取操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37972348/article/details/80932709

创建一个页面

1. 所有的页面都是存放在 app-res-layout 下的,所以我们在这个目录下鼠标右键-New-XML-Layout XML File

注意:布局文件命名时,不可以使用大写。


2. 点击图标可以切换不同的显示器,最常用的就是手机和平板,在这里我选择一个7寸的平板。


点击它旁边的图标,使其横屏显示


各个区域的作用:


通过底部选项卡可以在视图和xml视图之间切换,有些常用的属性设置可以在xml中快速设置。


3. 接下来先设计一个简单的登录页面吧~ 由于项目中只需要一个账号,所以直接锁定用户名,只需要输入密码就行了。


可以通过设置用户名输入框不可获得焦点的方式,使用户无法修改,具体做法如下:

找到要修改的Edittext这个控件,加入  android:focusable=“false”



4. 接下来编写视图所对应的控制器:LoginActivity

public class LoginActivity extends AppCompatActivity {
    Button loginLogin, backFromLogin;
    EditText loginPasswd;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);    //固定写法
        setContentView(R.layout.login);        //关联视图文件 R.layout 也是固定写法,程序会自动去app/res/layout目录下寻找该文件
        System.out.println("hello login");

/*     通常应用中需要经常读写的的数据文件都会保存在 /data/data/<应用包名>/files 目录下,包名可以在app/manifests/AndroidManifests.xml中找到
*      关于 openFileOutput(String name, int mode) 
*      第一个参数是要读取的文件名,该方法会自动去 /data/data/<应用包名>/files/ 目录下寻找
*      第二个参数代表操作模式:
*	    MODE_PRIVATE 私有(只能创建它的应用访问) 重复写入时会文件覆盖
*           MODE_APPEND  私有   重复写入时会在文件的末尾进行追加,而不是覆盖掉原来的文件 
*           MODE_WORLD_READABLE 公用  可读 
*           MODE_WORLD_WRITEABLE 公用 可读写
*/


        File file = new File("/data/data/com.example.administrator.myapplication/files/passwd.csv");
        try {
            if(!file.exists()){
                file.createNewFile();
                OutputStream out =  openFileOutput("passwd.csv", Context.MODE_PRIVATE);     //MODE_PRIVATE:会覆盖原内容
                openFileInput("passwd.csv");
                out.write("-6542-846521-6984-57-2466-2386-2375-4856".getBytes());
                out.flush();
                out.close();
                System.out.println("初始化密码成功");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

//      获得视图中的组件
        loginLogin = findViewById(R.id.loginLogin);        //R.id. 为固定写法,程序会自动去视图文件寻找相应ID的组件
        backFromLogin = findViewById(R.id.backFromLogin);
        loginPasswd = findViewById(R.id.loginPasswd);

//      设置登录按钮的点击事件
        loginLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String passwd = loginPasswd.getText().toString();

                try {
                    passwd = MD5.getMD5(passwd);
                } catch (NoSuchAlgorithmException e) {
                    e.printStackTrace();
                }
                InputStream input = null;
                try {
                    input = openFileInput("passwd.csv");    //该方法会自动去应用目录中的file目录下寻找该文件
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                List<String> allData = CSVUtils.CSVReadAll(input);    //封装了一个针对CSV文件读写操作的工具类,后面会介绍
                String correntPasswd = allData.get(0);
//                System.out.println("输入密码"+ passwd);
//                System.out.println("正确密码"+correntPasswd);
                if(correntPasswd.equals(passwd)){
//                  密码输入正确,准备跳转页面,如果有 finish(),则会终止本页面跳转,否则将保留本页面,另起一个线程来打开新页面
                    finish();
                    Intent intent=new Intent(LoginActivity.this,TargetActivity.class);
                    startActivity(intent);
                }else{
//                  在页面底部弹出提示
                    Toast.makeText(LoginActivity.this,"密码错误",Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

这样一个简单的页面就做好了~最后贴上MD5加解密 以及 文件读写工具类

public class MD5 {
    public static String getMD5(String val) throws NoSuchAlgorithmException {
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        md5.update(val.getBytes());
        byte[] m = md5.digest();//加密
        return getString(m);
    }
    private static String getString(byte[] b){
        StringBuffer sb = new StringBuffer();
        for(int i = 0; i < b.length; i ++){
            sb.append(b[i]);
        }
        return sb.toString();
    }
}
public class CSVUtils {
    public static List<String> CSVReadAll(InputStream input) {
//        可以获得全部内容的字符串,或者集合形式
        List<String> data = new ArrayList<String>();
//        StringBuilder sb = new StringBuilder();
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));
            String line = null;
            while((line=reader.readLine())!=null){
                data.add(line);
//                sb.append(line);
//                sb.append(System.getProperty("line.separator"));
            }
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return data;
    }
/**
*
* 对文件的读和写的操作建议分开执行,否则读取文件会得到不正确的内容,使用openFileOutput() 会影响正常的读取操作
* 返回修改后的全部内容,接下来需要将这些内容重写回该文件
*/
    public static String modifyCSV(FileInputStream in, String oldStr, String replaceStr){
        StringBuffer buf = null;
        String temp = "";
        try {
            InputStreamReader isr = new InputStreamReader(in);
            BufferedReader br = new BufferedReader(isr);
            buf = new StringBuffer();
//            保存前面的内容
            while ((temp = br.readLine()) != null && !(temp.startsWith(oldStr))) {
                buf = buf.append(temp);
                buf = buf.append(System.getProperty("line.separator"));
            }
//            找到要替换的数据,并替换
            System.out.println("将要被替换的数据:"+temp);
            String temp1 = temp.replace(temp,replaceStr);
            buf = buf.append(temp1);
            buf = buf.append(System.getProperty("line.separator"));

//            保存后面的内容
            while ((temp = br.readLine()) != null) {
                buf = buf.append(temp);
                buf = buf.append(System.getProperty("line.separator"));
            }
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
//        返回更新后的全部数据
        return buf.toString();    
    }
}


----------------------------------------------------------------------------------------------------------------------------

参考文章:

https://blog.csdn.net/chenzheng_java/article/details/6214261


猜你喜欢

转载自blog.csdn.net/m0_37972348/article/details/80932709