Android内部存储--InternalStorage

本文深入探讨了Android内部存储的特性和使用方法,通过实例展示了如何进行数据的存储和读取,包括输出流和输入流的应用,以及如何区分包名和保存数据的文本名称。

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

Android内部存储--InternalStorage

特点:1,内部存储总是有效的,只要内存未满就可以存储进去
       2,默认情况下  只能被本应用程序读写
       3,当删除当前应用程序时,内部存储数据也会跟着删除,因为内部存储数据保存在应用程序包名下
步骤:
存数据:输出流  
读数据:输入流
区分:包名和保存数据的文本的名称

实例

布局文件

<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"
    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"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入内容"/>
    <!-- 显示读取后的数据 -->
    <TextView 
        android:id="@+id/tv"
        android:layout_marginTop="30dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/et"/>

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/button1"
        android:layout_alignRight="@+id/tv"
        android:layout_marginRight="51dp"
        android:text="读出数据" 
        android:onClick="onClick"/>

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button3"
        android:layout_alignBottom="@+id/button3"
        android:layout_toRightOf="@+id/button1"
        android:onClick="onClick"
        android:text="读出数据2" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/button1"
        android:layout_below="@+id/button1"
        android:onClick="onClick"
        android:text="写入数据2" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tv"
        android:layout_marginRight="14dp"
        android:layout_marginTop="20dp"
        android:layout_toLeftOf="@+id/button2"
        android:onClick="onClick"
        android:text="写入数据" />

    <Button
        android:id="@+id/button5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/button3"
        android:layout_below="@+id/button3"
        android:onClick="onClick"
        android:text="写入数据3" />

    <Button
        android:id="@+id/button6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button5"
        android:layout_alignBottom="@+id/button5"
        android:layout_alignLeft="@+id/button4"
        android:onClick="onClick"
        android:text="读出数据3" />

    <Button
        android:id="@+id/button7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button1"
        android:layout_alignRight="@+id/button6"
        android:layout_below="@+id/button5"
        android:onClick="onClick"
        android:text="删除数据" />

</RelativeLayout>
逻辑代码

package com.example.week3_day3_internalstorage;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
	// 内部存储,不用加权限
	private EditText et;
	private TextView tv;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		et = (EditText) findViewById(R.id.et);
		tv = (TextView) findViewById(R.id.tv);
	}

	// 点击按钮时的事件
	public void onClick(View v) {
		switch (v.getId()) {
		// 写入数据
		case R.id.button1:
			OutputStream outputStream = null;
			try {
				// 输出流
				// name:文件名
				// mode:模式
				outputStream = openFileOutput("info.txt", MODE_PRIVATE);
				// 写入到流中
				outputStream.write(et.getText().toString().trim().getBytes());
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				if (outputStream != null) {
					try {
						outputStream.close();
					} catch (Exception e2) {
						e2.printStackTrace();
					}
				}
			}

			break;
		// 读出数据
		case R.id.button2:
			BufferedReader br = null;
			StringBuffer stringBuffer = new StringBuffer();
			try {
				InputStream inputStream = openFileInput("info.txt");
				br = new BufferedReader(new InputStreamReader(inputStream));
				String line = null;
				while ((line = br.readLine()) != null) {
					// 每次读入一行时就添加到stringBuffer
					stringBuffer.append(line);
				}
				// 显示到界面上
				tv.setText(stringBuffer.toString());
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				if (br != null) {
					try {
						br.close();
					} catch (Exception e2) {
						e2.printStackTrace();
					}

				}
			}
			break;
		/**
		 * 文件流读写数据
		 */
		case R.id.button3:// 写入数据2
			FileOutputStream fileOutputStream = null;
			// getFilesDir():得到存储路径
			File file = new File(getFilesDir(), "test.txt");
			try {
				// 缺少文件,新建一个
				fileOutputStream = new FileOutputStream(file);// 创建文件流
				fileOutputStream.write(et.getText().toString().trim()// 把数据写入到文件输出流
						.getBytes());
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				if (fileOutputStream != null) {
					try {
						fileOutputStream.close();// 关闭流
					} catch (Exception e2) {
						e2.printStackTrace();
					}
				}
			}

			break;
		case R.id.button4:// 读出数据2
			File file1 = new File(getFilesDir(), "test.txt");
			ByteArrayOutputStream outputStream2 = null;
			try {
				FileInputStream fileInputStream = new FileInputStream(file1);// 创建文件输入流,缺少文件,新建一个文件
				outputStream2 = new ByteArrayOutputStream();// 创建文件输出流,存放读出的数据
				byte[] buffer = new byte[1024];// 每次读1024字节
				int temp = 0;// 文件的长度
				while ((temp = fileInputStream.read(buffer)) != -1) {
					outputStream2.write(buffer, 0, temp);// 写数据到输出流
					outputStream2.flush();// 刷新流
				}
				tv.setText(outputStream2.toString().trim());// 将数据显示到界面上
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				if (outputStream2 != null) {
					try {
						outputStream2.close();
					} catch (Exception e2) {
						e2.printStackTrace();
					}
				}
			}
		case R.id.button5:
			FileOutputStream fileOutputStream2 = null;
			try {
				// 参数1:文件的名称,参数2:文件的后缀名,参数3:文件的保存路径
				File file2 = File.createTempFile("temp", null, getCacheDir());
				// 创建文件输出流,缺少文件,新建一个文件
				fileOutputStream2 = new FileOutputStream(file2);
				fileOutputStream2.write(et.getText().toString().trim()
						.getBytes());// 写数据到内存
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				if (fileOutputStream2 != null) {
					try {
						fileOutputStream2.close();
					} catch (Exception e2) {
						e2.printStackTrace();
					}

				}
			}

			break;
		case R.id.button6:
			// 文件名是随机的
			File file2 = new File(getCacheDir(), "");
			StringBuffer stringBuffer2 = new StringBuffer();
			BufferedReader bufferedReader = null;
			try {
				// 文件输入流,缺少文件,新建一个文件
				FileInputStream fileInputStream = new FileInputStream(file2);
				// 读数据
				bufferedReader = new BufferedReader(new InputStreamReader(
						fileInputStream));
				String line = null;
				while ((line = bufferedReader.readLine()) != null) {
					stringBuffer2.append(line);// 将数据添加到缓冲流中
				}
				tv.setText(stringBuffer2.toString().trim());
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				if (bufferedReader != null) {
					try {
						bufferedReader.close();
					} catch (Exception e2) {
						e2.printStackTrace();
					}
				}
			}
			break;
		case R.id.button7:
			// 删除数据
			Boolean b = deleteFile("info.txt");
			if (b) {
				Toast.makeText(MainActivity.this, "删除成功", 0).show();
			} else {
				Toast.makeText(MainActivity.this, "删除失败", 0).show();
			}
			break;
		default:
			break;
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值