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();
            }
        }
    }
}
时间: 2024-08-24 22:18:25

Android 在内部存储读写文件的相关文章

Android 在外部存储读写文件

本文主要介绍android中如何在外部存储读写数据 sd卡的路径 sdcard:2.3之前的sd卡路径 mnt/sdcard:4.3之前的sd卡路径 storage/sdcard:4.3之后的sd卡路径 打开file explorer 可以看到sdcard是个空的文件夹,因为这个文件夹是个快捷方式,指向/storag文件夹,接着打开storag文件夹 读写sd卡 最简单的打开sd卡的方式 File file = new File("sdcard/info.txt"); * 写sd卡需要

读写内部存储的文件数据

把  XXX.txt文件 写入/读取  在data/data/包  目录下面. 1 /** 读写内部存储的文件数据 */ 2 findViewById(R.id.btnWrite).setOnClickListener( 3 new View.OnClickListener() { 4 @Override 5 public void onClick(View v) { 6 try { 7 FileOutputStream fas = openFileOutput("text", 8 C

如何导出android内部存储的文件(不用root)

这段时间公司项目,涉及到数据缓存,由于需要缓冲的数据太多.太大,通过网络请求,再缓存到本地sqlite数据库,太费时间,消耗流量.所以准备先在本地保存一个标准版sqlite数据库(包含数据),打包到apk文件里,以后需要的操作就是更新数据,这样一来,请求和操作的数据就很小了. 那么问题来了,如何把标准版的sqlite数据库文件(db格式)从内部存储空间里面导出,然后放到项目中assets文件夹下? 想从内部存储空间里拷贝东西,首先要root,手机要root,APP也要获得root权限.这篇博客不

android 开发-数据存储之文件存储

android的文件存储是通过android的文件系统对数据进行临时的保存操作,并不是持久化数据,例如网络上下载某些图片.音频.视频文件等.如缓存文件将会在清理应用缓存的时候被清除,或者是应用卸载的时候缓存文件或内部文件将会被清除. 以下是开发学习中所写的示例代码,以供日后查阅: xml: 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="

Android学习——数据存储之文件存储

将数据存储到文件中并读取数据 1.新建FilePersistenceTest项目,并修改activity_main.xml中的代码,如下:(只加入了EditText,用于输入文本内容,不管输入什么按下back键就丢失,我们要做的是数据被回收之前,将它存储在文件中) 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.a

Android简易实战教程--第十五话《在外部存储中读写文件》

第七话里面介绍了在内部存储读写文件 点击打开链接. 这样有一个比较打的问题,假设系统内存不够用,杀本应用无法执行,或者本应用被用户卸载重新安装后.以前保存的用户名和密码都不会得到回显.所以,有必要注意这个问题 因此把文件保存到sd卡中.即今天所写的  第十五话<在外部存储中读写文件> 首先布局文件和第七话一样: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:

【转】 android中的文件操作详解以及内部存储和外部存储

摘要 其实安卓文件的操作和Java在pc环境下的操作并无二致,之所以需要单独讲解是因为安卓系统提供了不同于pc的访问文件系统根路径的api,同时对一个应用的私有文件做了统一的管理.根据我的经验,初学者在这部分感到很容易混淆内部存储和外部存储两个概念. 相对 其实安卓文件的操作和java在pc环境下的操作并无二致,之所以需要单独讲解是因为安卓系统提供了不同于pc的访问文件系统根路径的api,同时对一个应用的私有文件做了统一的管理.根据我的经验,初学者在这部分感到很容易混淆内部存储和外部存储两个概念

android中的文件操作详解以及内部存储和外部存储(转载)

原文链接:http://m.blog.csdn.net/article/details?id=17725989 摘要 其实安卓文件的操作和java在pc环境下的操作并无二致,之所以需要单独讲解是因为安卓系统提供了不同于pc的访问文件系统根路径的api,同时对一个应用的私有文件做了统一的管理.根据我的经验,初学者在这部分感到很容易混淆内部存储和外部存储两个概念. 相对 其实安卓文件的操作和java在pc环境下的操作并无二致,之所以需要单独讲解是因为安卓系统提供了不同于pc的访问文件系统根路径的ap

彻底理解android中的内部存储与外部存储

我们先来考虑这样一个问题: 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的时候又是清除的哪里的数据?读完本文相信你会有答案. 在android开发中我们常常听到这样几个概念,内存,内部存储,外部存储,很多人常常将这三个东西搞混,那么我们今天就先来详细说说这三个东西是怎么回事? 内存,我们在英文中称作memory,内部存储,我们称为InternalStorage,外部存储我