zoukankan      html  css  js  c++  java
  • Android 在内部存储读写文件

    文件读写操作
    * Ram内存:运行内存,相当于电脑的内存
    * Rom内存:内部存储空间,相当于电脑的硬盘
    * sd卡:外部存储空间,相当于电脑的移动硬盘
    在内部存储空间中读写文件
    >小案例:用户输入账号密码,勾选“记住账号密码”,点击登录按钮,登录的同时持久化保存账号和密码。界面如下:

    1. 定义布局

    代码如下:

    <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=".MainActivity" 
        android:orientation="vertical"
        >
    
        <EditText
            android:id="@+id/et_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入账号" />
    
        <EditText
            android:id="@+id/pass"
            android:inputType="textPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入密码" />
        <CheckBox 
            android:id="@+id/cb"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="记住账号和密码"     
            />
        <Button 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="click"
            android:text="登录"
            />
    
    </LinearLayout>

    看着会不怎么舒服,重新调整布局,代码如下:

    <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:orientation="vertical"
        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=".MainActivity" >
    
        <EditText
            android:id="@+id/et_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入账号" />
    
        <EditText
            android:id="@+id/et_pass"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入密码"
            android:inputType="textPassword" />
    
        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
    
            <CheckBox
                android:id="@+id/cb"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:text="记住账号和密码" />
    
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:onClick="click"
                android:text="登录" />
        </RelativeLayout>
    
    </LinearLayout>

    2. 完成按钮的点击事件

    弹Toast提示用户登录成功

    Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();

    3. 拿到用户输入的数据

    * 判断用户是否勾选保存账号密码

    CheckBox cb = (CheckBox) findViewById(R.id.cb);
    if(cb.isChecked()){

    }

    完整代码如下:

    package com.wuyudong.rwinrom;
    
    import java.io.File;
    import java.io.FileOutputStream;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    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);
        }
    
        public void click(View v) {
            // 获取用户输入的账号和密码
            EditText et_name = (EditText) findViewById(R.id.et_name);
            EditText et_pass = (EditText) findViewById(R.id.et_pass);
    
            String name = et_name.getText().toString();
            String pass = et_pass.getText().toString();
    
            // 获取选框组件
            CheckBox cb = (CheckBox) findViewById(R.id.cb);
            // 检测选框是否被勾选
            if (cb.isChecked()) {
                saveAccount(name, pass);
            }
            // 弹Toast提示框
            Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
    
        }
    
        public void saveAccount(String name, String pass) {
            File file = new File("data/data/com.wuyudong.rwinrom/info.txt");
            try {
                FileOutputStream fos = new FileOutputStream(file);
                fos.write((name + "##" + pass).getBytes());
                fos.close();
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
        }
    }

    运行程序之前,内部存储照中的文件夹如下

    可以看到相关文件夹是空的

    运行得到如下界面

    点击登录按钮,生成一个info.txt的文件

    导出该文件到本地电脑

    文件内容为:wuyudong##123456

    4. 开启io流把文件写入内部存储

    * 直接开启文件输出流写数据

    //持久化保存数据
    File file = new File("data/data/com.itheima.rwinrom/info.txt");
    FileOutputStream fos = new FileOutputStream(file);
    fos.write((name + "##" + pass).getBytes());
    fos.close();
    * 读取数据前先检测文件是否存在

    if(file.exists())
    * 读取保存的数据,也是直接开文件输入流读取

    File file = new File("data/data/com.itheima.rwinrom/info.txt");
    FileInputStream fis = new FileInputStream(file);
    //把字节流转换成字符流
    BufferedReader br = new BufferedReader(new InputStreamReader(fis));
    String text = br.readLine();
    String[] s = text.split("##");
    * 读取到数据之后,回显至输入框

    et_name.setText(s[0]);
    et_pass.setText(s[1]);
    * 应用只能在自己的包名目录下创建文件,不能到别人家去创建

    最后的代码如下:

    package com.wuyudong.rwinrom;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStreamReader;
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.View;
    import android.widget.CheckBox;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
        // File file = new File("data/data/com.wuyudong.rwinrom/info.txt");
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            loadAccount();
        }
    
        public void click(View v) {
            // 获取用户输入的账号和密码
            EditText et_name = (EditText) findViewById(R.id.et_name);
            EditText et_pass = (EditText) findViewById(R.id.et_pass);
    
            String name = et_name.getText().toString();
            String pass = et_pass.getText().toString();
    
            // 获取选框组件
            CheckBox cb = (CheckBox) findViewById(R.id.cb);
            // 检测选框是否被勾选
            if (cb.isChecked()) {
                saveAccount(name, pass);
            }
            // 弹Toast提示框
            Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
    
        }
    
        public void saveAccount(String name, String pass) {
            File file = new File("data/data/com.wuyudong.rwinrom/info.txt");
            try {
                FileOutputStream fos = new FileOutputStream(file);
                fos.write((name + "##" + pass).getBytes());
                fos.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public void loadAccount() {
            File file = new File("data/data/com.wuyudong.rwinrom/info.txt");
            if (file.exists()) {
                try {
                    FileInputStream fis = new FileInputStream(file);
                    // 把字节流转换为字节流
                    BufferedReader br = new BufferedReader(new InputStreamReader(
                            fis));
                    String text = br.readLine();
                    String[] s = text.split("##");
                    // 获取用户输入的账号和密码
                    EditText et_name = (EditText) findViewById(R.id.et_name);
                    EditText et_pass = (EditText) findViewById(R.id.et_pass);
                    et_name.setText(s[0]);
                    et_pass.setText(s[1]);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
  • 相关阅读:
    深入理解CSS中的层叠上下文和层叠顺序
    利用CSS3制作淡入淡出动画效果
    <link>标签的rel属性全解析
    解决<pre>标签里的文本换行(兼容IE, FF和Opera等)
    HTML特殊字符大全
    清除浮动4种方法总结下
    打开wamp中的phpmyadmin出现403的错误
    js访问CSS最终计算样式
    js 正则 exec() 和 match() 数据抽取
    函数表达式中,函数名称在函数体内是只读的
  • 原文地址:https://www.cnblogs.com/wuyudong/p/5542857.html
Copyright © 2011-2022 走看看