Android数据存储:File存储

本文介绍了Android中使用File进行数据存储的方法,包括`openFileOutput`与`openFileInput`进行内部存储的操作,以及如何在SDCard中进行数据的读写。详细步骤包括创建布局文件、实现读写功能,并强调了在SDCard操作中需要获取相应权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android中File存储数据

 

1、File存储

 

1.1、openFileOutput与openFileInput

 1)、新建布局文件outputinput_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/et_input"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入内容"
        android:lines="3" />

    <Button
        android:id="@+id/btn_save"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="btnOnClick"
        android:text="保存内容" />

    <Button
        android:id="@+id/btn_get"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="btnOnClick"
        android:text="读取内容" />

    <TextView
        android:id="@+id/tv_show"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>


 

2)、新建FileOutputInputDemoActivity

 

package com.example.iodemo;

import java.io.FileInputStream;
import java.io.FileOutputStream;

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

public class FileOutputInputDemoActivity extends Activity {
	// 声明组件
	private EditText et_input = null;
	private Button btn_save = null;
	private Button btn_get = null;
	private TextView tv_show = null;
	// 声明文件名称及类型
	private String FILENAME = "test.txt";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.outputinput_layout);
		// 取得组件信息
		et_input = (EditText) findViewById(R.id.et_input);
		btn_save = (Button) findViewById(R.id.btn_save);
		btn_get = (Button) findViewById(R.id.btn_get);
		tv_show = (TextView) findViewById(R.id.tv_show);
	}

	// 设置单击事件
	public void btnOnClick(View view) {
		switch (view.getId()) {
		    case R.id.btn_save:
			write();
			break;
		    case R.id.btn_get:
			read();
			break;

		    default:
			break;
		}
	}

	// 写入数据到文件中
	public void write() {
		// 取得EditText中的数据
		String content = et_input.getText().toString();

		try {
			// 实例化文件输入流,指定写数据路径
			FileOutputStream write = openFileOutput(FILENAME,
					MODE_WORLD_WRITEABLE);
			// 声明字节数组,用于把字符串转化成字节数据
			byte[] b = content.getBytes();
			// 写数据
			write.write(b);
			// 关闭流
			write.close();
			// 提示保存数据成功
			Toast.makeText(this, "保存数据成功", Toast.LENGTH_LONG).show();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 从文件中读出数据
	public void read() {
		// 用于把byte数组转化成字符串
		String str = null;
		try {
			// 实例化文件输入流,指定读数据路径
			FileInputStream read = openFileInput(FILENAME);
			// 声明字节型数组,用于缓冲读取的数据
			byte[] b = new byte[1024];
			// 定义长度,如果文件中还有数据则继续读
			int len = 0;
			while ((len = read.read(b)) > 0) {
				str = new String(b);// 把字节数组转化成字符串
			}
			// 关闭流
			read.close();
			// 把转化后的字符串赋值到TextView中
			tv_show.setText(str);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}


3)、运行效果:

 

 

1.2、SDCard中的数据读写

1)、声明一个布局文件sdcard_layout.xml,文件中有两个按钮,一个用于保存数据,一个用于读取数据。一个EditText用于接收用户输入数据,一个TextView用于显示读取出来的数据。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/et_inputsdcard"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="input something"
        android:lines="3" />

    <Button
        android:id="@+id/btn_savesdcard"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="btnOnClick"
        android:text="保存内容到sdcard" />

    <Button
        android:id="@+id/btn_getsdcard"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="btnOnClick"
        android:text="读取sdcard内容" />

    <TextView
        android:id="@+id/tv_showsdcard"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

 

2)、新建SDCardDemoActivity,代码如下


package com.example.iodemo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

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

public class SDCardDemoActivity extends Activity {
	// 声明组件
	private EditText et_inputsdcard = null;
	private Button btn_savesdcard = null;
	private Button btn_getsdcard = null;
	private TextView tv_showsdcard = null;
	// 声明文件名称及类型
	private String FILENAME = File.separator + "test.txt";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.sdcard_layout);
		// 取得组件信息
		et_inputsdcard = (EditText) findViewById(R.id.et_inputsdcard);
		btn_savesdcard = (Button) findViewById(R.id.btn_savesdcard);
		btn_getsdcard = (Button) findViewById(R.id.btn_getsdcard);
		tv_showsdcard = (TextView) findViewById(R.id.tv_showsdcard);
	}

	// 设置单击事件
	public void btnOnClick(View view) {
		switch (view.getId()) {
		case R.id.btn_savesdcard:
			writeSDCard();
			break;
		case R.id.btn_getsdcard:
			readSDCard();
			break;

		default:
			break;
		}
	}

	// 写入数据到SDCard中
	public void writeSDCard() {
		String str = Environment.getExternalStorageState();
		String str1 = Environment.MEDIA_MOUNTED;
		// 取得EditText中的数据
		String content = et_inputsdcard.getText().toString();
		if (str.equals(str1)) {
			// 获取SDCard对应的存储目录
			File sdcardDir = Environment.getExternalStorageDirectory();

			try {
				// 实例化文件输入流,指定写数据路径
				FileOutputStream write = new FileOutputStream(
						sdcardDir.getCanonicalPath() + FILENAME);
				// 声明字节数组,用于把字符串转化成字节数据
				byte[] b = content.getBytes();
				// 写数据
				write.write(b);
				// 关闭流
				write.close();
				// 提示保存数据成功
				Toast.makeText(this, "保存数据成功", Toast.LENGTH_LONG).show();

			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	// 从SDCard中读出数据
	public void readSDCard() {
		// SdCard目录存在
		if (Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED)) {
			// 获取SDCard对应的存储目录
			File file = Environment.getExternalStorageDirectory();
			// 用于把byte数据数据转化成String
			String str = null;
			try {
				// 实例化文件输入流,指定读数据路径
				FileInputStream read = new FileInputStream(
						file.getCanonicalPath() + FILENAME);
				// 声明字节型数组,用于缓冲读取的数据
				byte[] b = new byte[1024];
				// 定义长度,如果文件中还有数据则继续读
				int len = 0;
				while ((len = read.read(b)) > 0) {
					str = new String(b);// 把字节数组转化成字符串
				}
				// 关闭流
				read.close();
				// 把转化后的字符串赋值到TextView中
				tv_showsdcard.setText(str);
			} catch (Exception e) {
				e.printStackTrace();
			}

		}
	}

}

 

注意:在运行之前还需要在AndroidManifest.xml中配置相应权限:

 

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


 


 3)、运行效果:

 

输入一串字符:提示保存成功

点击取得数据:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值