Android-文件存储

目标效果:

Android-文件存储_第1张图片 Android-文件存储_第2张图片 Android-文件存储_第3张图片

程序运行,显示一输入框和按钮,在输入框输入内容点击按钮会提示保存成功,关闭程序,再次打开会在输入框显示刚才输入的内容,并提示英文。


1.activity_main.xml页面放置两个控件。

activity_main.xml页面:

<RelativeLayout 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=".MainActivity" >

    <EditText
        android:id="@+id/etInput"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/btClick"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="34dp"
        android:ems="10"
        android:hint="请输入想保存的内容" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/btClick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:onClick="save"
        android:text="确定" />

</RelativeLayout>


2.新建FileService.java类,编写保存和读取方法。

FileService.java页面:

package com.example.file;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

import android.content.Context;

public class FileService {
	private Context context;
	public FileService(Context context){
		this.context=context;
	}

	/*创建文件保存内容*/
	public void save(String fileName,String content){
		BufferedWriter bw=null;
		try {
			//打开文件,得到文件输出流(字节流),参数一为文件名,参数二为打开方式,为私有
			FileOutputStream fos=context.openFileOutput(fileName,context.MODE_PRIVATE);
			//OutputStreamWriter把字节流转换成字符流,BufferedWriter创建缓冲区
			bw=new BufferedWriter(new OutputStreamWriter(fos));
			//往缓冲区写入内容
			bw.write(content);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				if(bw!=null){
					bw.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	/*打开文件读取内容*/
	public String read(String fileName){
		String line;
		StringBuilder sb=new StringBuilder();
		BufferedReader br=null;
		try {
			FileInputStream fis=context.openFileInput(fileName);
			br=new BufferedReader(new InputStreamReader(fis));
			while((line=br.readLine())!=null){
				sb.append(line);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				if(br!=null){
					br.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return sb.toString();
	}
}


3.写完保存方法和读取方法,可以先不写MainActivity.java的代码,先写一个fileText.java类进行单元测试,检测保存方法和读取方法是否有错误。

fileText.java页面:

package com.example.text;

import com.example.file.FileService;

import android.test.AndroidTestCase;
import android.util.Log;

public class fileText extends AndroidTestCase{

	public void saveText(){
		FileService fileservice=new FileService(getContext());
		fileservice.save("out.txt","hello!");
	}
	public void readText(){
		FileService fileservice=new FileService(getContext());
		String s=fileservice.read("out.txt");
		Log.i("MainActivity","s="+s);
	}
}


4.编写完测试类后,开始测试运行,两个方法的运行方式都一样。
Android-文件存储_第4张图片


5.测试运行后,如果在左上角出现绿色横条,说明方法编写无错误。
Android-文件存储_第5张图片

6.最后编写MainActivity.java页面,用于将保存和读取方法和控件绑定。
MainActivity.java页面:
package com.example.file;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

	private EditText etInput;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		/*获取控件方法*/
		getId();
		/*读取文件内容方法*/
		read();
	}

	/*读取文件内容方法*/
	private void read() {
		FileService fileservice=new FileService(this);
		String content=fileservice.read("myfile.txt");
		if(!content.isEmpty()){
			etInput.setText(content);
			etInput.setSelection(content.length());
			Toast.makeText(this,"Restoring succeeded",Toast.LENGTH_SHORT).show();
		}
	}
	
	/*点击按钮调用save方法*/
	public void save(View view){
		FileService fileservice=new FileService(this);
		String content=etInput.getText().toString();
		fileservice.save("myfile.txt",content);
		Toast.makeText(this,"保存成功",Toast.LENGTH_SHORT).show();
	}

	/*获取控件方法*/
	private void getId() {
		etInput=(EditText) findViewById(R.id.etInput);
	}
}


7.另外在Afest.xml页面添加配置信息。
Android-文件存储_第6张图片


8.运行后可以显示目标效果,可以从环境中看到文件保存目录,还是需要在模拟器环境下查看。
Android-文件存储_第7张图片



9.按照以前博文介绍的方法,可以导保存到桌面查看文件中的内容,可以发现out.txt文件中是测试时保存的“hello!”,myfile.txt文件中是运行时输入的“123456”。








你可能感兴趣的:(android,File,Activity,文件存储,保存数据)