Android数据存储之间Files

Android系统本身借用了JAVA里面的读写文件的机制。本文的这个例子就是利用文件的写读对数据进行存储,即当界面的输入文本框改变时,程序将改变的值写入文件中。当程序再运行时则从文件中读取先前保存的值,将文本框填充。

程序的界面同mySharedPreferences例子一样。下面只贴出几个文件的内容:

 

AndroidManifest.xml文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.demo.myFileIo"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".myFileIo"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>


</manifest> 


 

main.xml文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    
	<TextView android:text="请输入用户名:" 
	android:id="@+id/TextView01" 
	android:layout_width="wrap_content" 
	android:layout_height="wrap_content">
	</TextView>
	
	<EditText android:layout_height="wrap_content" 
	android:layout_width="fill_parent" 
	android:text="@+id/EditText01" 
	android:id="@+id/EditText01">
	</EditText>
	
	<TextView android:text="请输入密码:" 
	android:id="@+id/TextView02" 
	android:layout_width="wrap_content" 
	android:layout_height="wrap_content">
	</TextView>
	
	<EditText android:layout_height="wrap_content" 
	android:layout_width="fill_parent" 
	android:text="@+id/EditText02" 
	android:id="@+id/EditText02">
	</EditText>



</LinearLayout>


myFileIo.java文件内容如下:

 

package com.demo.myFileIo;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.KeyEvent;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;

public class myFileIo extends Activity {
	//定义各个元素对象
	EditText username;
	EditText password;
	//定义一个要写入的文件的路径
	String path;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //元素绑定
        username = (EditText)findViewById(R.id.EditText01);
        password = (EditText)findViewById(R.id.EditText02);
        
        File sdDir = Environment.getExternalStorageDirectory();
        //得到Sdcard的路径 
        path = sdDir.getAbsolutePath();
        //得到保存的用户名,如果没有值则设置为空
        username.setText(getUserName());
        password.setText("");
        
        //监听文本框改变,然后保存新的用户名
        username.setOnEditorActionListener(new OnEditorActionListener()
        {

			public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
				// TODO Auto-generated method stub
				//保存现在的用户名,下次使用时可读取
				saveUserName(username.getText().toString());
				username.setText(username.getText().toString());
				return false;
			}
        	
        });
    }
    
    private String getUserName()
    {
    	String username = "";
    	//新创建一个文件
    	File file1 = new File(path,"/setting.txt");
    	//如果在SD卡中存此文件,则显示此文本,否则创建文件
    	if(!file1.exists())
    	{
    		//返回空字符串
    		username = "";
    	}
    	else
    	{
    		//读入TXT文本资源,创建输入流。
    		File file = new File(path,"/setting.txt");
    		InputStream is = null;
    		try
    		{
    			is = new FileInputStream(file);
    		}
    		catch(FileNotFoundException el)
    		{
    			el.printStackTrace();
    		}
    		//创建字符存放缓存
    		byte[] buffer = new byte[1024];
    		int rd = 0;
    		//新建输出流
    		ByteArrayOutputStream baops = new ByteArrayOutputStream();
    		//读取文本文件到缓存中
    		try
    		{
    			while((rd = is.read(buffer)) != -1)
    			{
    				baops.write(buffer,0,rd);
    			}
    			//进行中文编码转换
    			String temp = new String(baops.toByteArray(),"GB2312");
    			//关闭输出流
    			baops.close();
    			//将文件内容输出
    			username = temp;
    		}
    		catch(IOException e)
    		{
    			e.printStackTrace();
    		}
    	}
    	
		return username;
    }
    
    private void saveUserName(String username)
    {
    	//新建一个文件
    	//得到文件资源作为读写流
    	byte str[] = username.getBytes();
    	FileOutputStream out;
    	try
    	{
    		//创建文件
    		File file = new File(path+"/setting.txt");
    		file.createNewFile();
    		//打开文件file的OutputStream
    		out = new FileOutputStream(file);
    		//将字符串转换成byte数组写入文件
    		out.write(str);
    		//关闭文件file的OutputStream
    		out.close();
    	}catch(IOException e)
    	{
    		e.printStackTrace();
    	}
    }
}


得到的程序界面如mySharedPreferences例子的界面,在此不再上传图片。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值