Android 存储学习之在内部存储中读写文件

大家都知道,在实际工作中开发,进场需要将一个文件写入到手机的存储中。既然说到手机的存储空间,那就先说说手机的存储空间分类:

1: 内部存储空间

RAM内存: 也就是手机的运行的内存,相当于电脑的内存

ROM内存: 也就是手机的存储内存,相当于电脑的硬盘

2: 外部存储空间

也就是可插拔的SD卡,相当于电脑的移动硬盘,U盘等。

既然手机存储分为两类,那我们先看看如何在手机的内部存储中读写文件。

那我们引入一个实际中很常见的例子:

一般带登录界面的,都需要将用户的信息保存到本地。我们就用上面的例子演示,将用户输入的信息保存到手机的内部存储。

布局文件代码如下:

<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"
    tools:context="${relativePackage}.${activityClass}"
    android:orientation="vertical"
    >

    <EditText
        android:id="@+id/ed_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入用户名"
        android:layout_marginTop="20dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        />

    <EditText
        android:id="@+id/ed_passwd"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入密码"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
         android:inputType="textPassword"
        />

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        >

        <CheckBox
            android:id="@+id/cb"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="自动登录"
            android:layout_centerVertical="true"
            android:layout_marginLeft="40dp"

            />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="登录"
            android:layout_marginRight="40dp"
            android:layout_alignParentRight="true"
            android:onClick="login"
            />

    </RelativeLayout>

</LinearLayout>

当我们点击按下确定按钮后,会将我们的用户信息,写到手机的内部存储中,也就是该应用所在的包名下

 public void login(View v)
    {
    	String name = ed_nam.getText().toString();

    	String passwd = ed_passwd.getText().toString();

    	//判断用户名或者密码是否输入
    	if((name.equals("")) || (passwd.equals("")))
    	{
    		Toast.makeText(this, "用户名或密码不能为空", Toast.LENGTH_SHORT).show();
    	}
    	else
    	{
    		//如果选中自动登录,我们就需要保存用户名和密码
    		if(cb.isChecked())
    		{
    			//创建一个文件,用户保存用户名和密码
    			File file = new File("data/data/com.demo.storage/info.txt");
    			try {

					FileOutputStream fos = new FileOutputStream(file);
					//写入用户名和密码,以name##passwd的格式写入
					fos.write((name + "##" + passwd).getBytes());
					//关闭输出流
					fos.close();
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
    		}

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

我所指定的文件存储路径就是包名下的info.txt文件:

我们导出可以看下:

到这里的话,我们的往手机的内部存储中写已经完成。接下是往手机的内部存储中读。

那我们就这样做,当如果只要点击进入此Actiivty就显示出用于以前保存的用于和密码

public void readInfo()
	{
		File file = new File("data/data/com.demo.storage/info.txt");

		//如果文件存在,则读取
		if(file.exists())
		{
			try {

				FileInputStream fin = new FileInputStream(file);
				//把字节流转化为字符流
				BufferedReader buffer = new BufferedReader(new InputStreamReader(fin));
				//读取文件中的用户名和密码
				String text = buffer.readLine();
				//以##为关键字分割字符
				String s[] = text.split("##");

				//设置进EditText
				ed_nam.setText(s[0]);
				ed_passwd.setText(s[1]);

			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}

当我们只要进入就会回显出,我能输入的用户名和密码:

到这里我们的读写就完成了。

但是有人有没有发现我们上面的路径都是我们自己写死的,同时也是自己用手一个一个写的,万一中间写错一个字母,岂不是很麻烦。

不过Google给我们提供了一个专门访问内部存储的API:getFilesDir()

    			//创建一个文件,用户保存用户名和密码
    			//File file = new File("data/data/com.demo.storage/info.txt");

    			//getFilesDir返回的是一个File对象,其路径是:data/data/com.demo.storage/files
    			File file = new File(getFilesDir(), "info.txt");

getFileDir的路径是包名下files文件下:当我们点击登录时,就会在此路径下创建一个info.txt文件

同理Google也提供了一个API: getCacheDir(),其路径大家可以猜到了,就是上图cache所在的路径了。

我们进入到系统设置,app,正在运行中就找到此进程

就能看到如上图所示,其中Clear Data按钮是清除包名文件夹下所有的内容,Clear Cache是清除Cache文件夹下的内容

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-08 03:57:02

Android 存储学习之在内部存储中读写文件的相关文章

Android 存储学习之在外部存储中读写文件

上节学习了如何在手机内部存储中读写文件,本节学习如何在手机的外部存储中读写文件.那就是如何在Sdcard中读写文件. 那我们还是用以前登录界面的例子举例说明,(登录界面请看上节Android 存储学习之在内部存储中读写文件) 先我们显示写的代码: 当点击确定并且自动登录的钩是选中的,则就会在sdcard文件夹写创建一个info.txt文件 public void login(View v) { String name = ed_nam.getText().toString(); String p

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

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

在android中读写文件

在android中读写文件 android中只有一个盘,正斜杠/代表根目录. 我们常见的SDK的位置为:/mnt/sdcard 两种最常见的数据存储方式: 一.内存 二.本地 1.手机内部存储 2.外部存储设备(SD卡) 在SD卡中读数据是不需要权限的,但是在SD卡中写数据是要权限的: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 读写文件的方式就是用的Java的文件

Android 如何在linux kernel 中读写文件

前言 欢迎大家我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net 雨季o莫忧离:http://blog.csdn.net/luckkof 正文 [Description] 如何在linux kernel 中读写文件 [Keyword] linux kernel read write file 读写文件 [Solution] 通常我们只会在linux native/app 层 读写文件,但可能有一些非常特别的情况下,我们需要直接在

Android 怎样在linux kernel 中读写文件

前言 欢迎大家我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net 雨季o莫忧离:http://blog.csdn.net/luckkof 正文 [Description] 怎样在linux kernel 中读写文件 [Keyword] linux kernel read write file 读写文件 [Solution] 通常我们仅仅会在linux native/app 层 读写文件,但可能有一些很特别的情况下,我们须要直接在

PHP中读写文件实现代码

PHP中读写文件实现代码 PHP中读写文件实现代码,整理的还不错,需要的朋友可以参考下. 在PHP中读写文件,可以用到一下内置函数: 1.fopen(创建文件和打开文件) 语法: 复制代码 代码如下: fopen(filename,mode) filename,规定要打开的文件.mode,打开文件的模式,可能的值见下表. mode 说明 "r" 只读方式打开,将文件指针指向文件开头. "r+" 读写方式打开,将文件指针指向文件开头. "w" 写入

解决 python 中读写文件的终极方案 UnicodeDecodeError: &#39;gbk&#39; codec can&#39;t decode byte 0x9d in position 1270: illega

UnicodeDecodeError: 'gbk' codec can't decode byte 0x9d in position 1270: illegal multibyte sequence 上面是遇到的错误,本来想完成读文件,再写入另一文件的.但是在 fp.read() 时,一直遇到上面的错误,经过各种百度,google, 还有神奇的 stackoverflow 才知道是字符流的问题. 知道问题所在,还是没有解决,又苦苦搜索,终于在 stackoverflow 上找到灵感,可以把 op

如何在QML应用中读写文件

我们知道,在QML应用中,有时我们需要来读写一些文件,但是在我们的QML语言中并没有相应的API接口来供我们做(虽然有API接口来存储设置文件等).那么我们怎么来做这个事情呢?我们可以通过Qt C++的方法来实现这个功能. 1)创建一个简单的模版应用 我们使用Ubuntu SDK的模版来创建一个最简单的应用:      我们选择"QML App with C++ plugin"模版来做我们的应用. 2)添加文件读写的文件到项目中 我们添加如下的C++ "FileIO类到我们的

c++中读写文件操作

读写文件这个,不常用,每次用的时候都会百度一下,每次写法还都不一样,所有总是记混.今天利用点时间总结下之前工程中用过的.以后就安照这种方法写了. 搞acmicpc的时候喜欢用freopen(),这个是c语言里面的用法如下: #include<stdio.h> int main(){ freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); int n,m