手记

内部存储使用详解

和您一起终身学习,这里是程序员Android

本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

一、内部存储的保存路径
二、内部存储的(保存,读取)使用方法
三、内部存储的Demo
四、内部存储的其他方法

Android 可以直接保存文件到内部存储,保存在内部存储的文件是应用的私有文件,其他应用无法访问,当app被卸载时候,文件也会被删除掉。内部存储经常以文件的形式保存。

一、内部存储的保存路径

内部存储保存路径如下:
/data/data/com.**包名/files/文件名

#二、内部存储的(保存,读取)使用方法

1. 保存文件的方法

文件保存的常用方法如下:

  • 1.使用文件名称和操作模式调用 openFileOutput()
    这将返回一个 FileOutputStream
  • 2.使用 write() 写入到文件。
  • 3.使用 close() 关闭流式传输。
	// 1.保存文件方法
	private void SaveFile() {
		String filename = etname.getText().toString().trim();
		String filecontent = etcontent.getText().toString().trim();
		if (TextUtils.isEmpty(filename) || TextUtils.isEmpty(filecontent)) {
			Toast.makeText(getApplicationContext(), "文件名不能为空",
					Toast.LENGTH_LONG).show();
			return;
		}
		// 打开一个用来读写的文件,该文件与当前上下文所在的包相关,调用该方法不需要添加任何全选,
		// 保存在手机内部存储中
		try {
			// 打开输出流,并创建文件
			FileOutputStream fos = openFileOutput(filename, MODE_PRIVATE);
			// 输入的内容保存到文件中
			fos.write(filecontent.getBytes());
			fos.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		Toast.makeText(getApplicationContext(), "保存成功", Toast.LENGTH_LONG)
				.show();
		etname.setText("");
		etcontent.setText("");

	}

2. 读取 File 内容的方法

读取 File 内容的方法如下:
1.调用 openFileInput()并向其传递要读取的文件名称。 这将返回一个 FileInputStream
2.使用read() 读取文件字节。
3.然后使用close()关闭流式传输。

	// 2.打开文件方法
	private void OpenFile() {
		String filename = etname.getText().toString().trim();
		if (TextUtils.isEmpty(filename)) {
			Toast.makeText(getApplicationContext(), "文件名不能为空",
					Toast.LENGTH_LONG).show();
			return;
		}
		try {
			// 打开文件得到一个只读的输入流,
			FileInputStream fis = openFileInput(filename);
			// 将文件内容存放的byte数组中
			byte[] buffer = new byte[fis.available()];
			// 读取数组中的内容
			fis.read(buffer);
			fis.close();
			// 将数组内容存放到字符串中,并显示出来
			etcontent.setText(new String(buffer));
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

3.删除文件的方法

如需删除文件,可以根据文件名删除 deleteFile(filename);

	// 3.删除文件方法
	private void DeleteFile() {
		String filename = etname.getText().toString().trim();
		if (TextUtils.isEmpty(filename)) {
			Toast.makeText(getApplicationContext(), "文件名不能为空",
					Toast.LENGTH_LONG).show();
			return;
		}
		// 删除上下文中指定名称的文件,
		boolean deletefile = deleteFile(filename);
		if (deletefile) {
			Toast.makeText(getApplicationContext(), "删除成功", Toast.LENGTH_LONG)
					.show();

		}
	}

三、内部存储的案例

##1.实现效果如下:
实现文件的保存、读取、删除功能

##2. 实现代码如下:

public class FileInternalStorageMethods extends Activity implements
		OnClickListener {
	/*
	 * 内部存储的方法FileOutputStream(filename, MODE_PRIVATE);
	 * FileInputStream(filename); deleteFile(filename); 文件保存位置:
	 * /data/data/包名/files/文件名 内部存储的特点: 内部存储里的东西会随着app的卸载而清掉
	 * 
	 * *
	 */

	private EditText etname, etcontent;
	private Button savebtn, openbtn, deletebtn;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_internal_methods);
		InitView();
	}

	private void InitView() {
		etname = (EditText) findViewById(R.id.editfilename);
		etcontent = (EditText) findViewById(R.id.edit_filecontext);
		savebtn = (Button) findViewById(R.id.savefile);
		openbtn = (Button) findViewById(R.id.openfile);
		deletebtn = (Button) findViewById(R.id.deletefile);

		savebtn.setOnClickListener(this);
		openbtn.setOnClickListener(this);
		deletebtn.setOnClickListener(this);

	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.savefile:

			SaveFile();
			break;
		case R.id.openfile:

			OpenFile();
			break;
		case R.id.deletefile:

			DeleteFile();
			break;
		default:
			break;
		}

	}

	// 1.保存文件方法
	private void SaveFile() {
		String filename = etname.getText().toString().trim();
		String filecontent = etcontent.getText().toString().trim();
		if (TextUtils.isEmpty(filename) || TextUtils.isEmpty(filecontent)) {
			Toast.makeText(getApplicationContext(), "文件名不能为空",
					Toast.LENGTH_LONG).show();
			return;
		}
		// 打开一个用来读写的文件,该文件与当前上下文所在的包相关,调用该方法不需要添加任何全选,
		// 保存在手机内部存储中
		try {
			// 打开输出流,并创建文件
			FileOutputStream fos = openFileOutput(filename, MODE_PRIVATE);
			// 输入的内容保存到文件中
			fos.write(filecontent.getBytes());
			fos.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		Toast.makeText(getApplicationContext(), "保存成功", Toast.LENGTH_LONG)
				.show();
		etname.setText("");
		etcontent.setText("");

	}

	// 2.打开文件方法
	private void OpenFile() {
		String filename = etname.getText().toString().trim();
		if (TextUtils.isEmpty(filename)) {
			Toast.makeText(getApplicationContext(), "文件名不能为空",
					Toast.LENGTH_LONG).show();
			return;
		}
		try {
			// 打开文件得到一个只读的输入流,
			FileInputStream fis = openFileInput(filename);
			// 将文件内容存放的byte数组中
			byte[] buffer = new byte[fis.available()];
			// 读取数组中的内容
			fis.read(buffer);
			fis.close();
			// 将数组内容存放到字符串中,并显示出来
			etcontent.setText(new String(buffer));
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	// 3.删除文件方法
	private void DeleteFile() {
		String filename = etname.getText().toString().trim();
		if (TextUtils.isEmpty(filename)) {
			Toast.makeText(getApplicationContext(), "文件名不能为空",
					Toast.LENGTH_LONG).show();
			return;
		}
		// 删除上下文中指定名称的文件,
		boolean deletefile = deleteFile(filename);
		if (deletefile) {
			Toast.makeText(getApplicationContext(), "删除成功", Toast.LENGTH_LONG)
					.show();

		}
	}

}

##3. 实现布局 如下:

<?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" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/editfilename"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="1"
            android:background="@android:drawable/edit_text"
            android:hint="请输入文件名"
            android:padding="5dp"
            android:textSize="20sp" />

        <Button
            android:id="@+id/savefile"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="5dp"
            android:padding="5dp"
            android:text="保存"
            android:textSize="25sp" />

        <Button
            android:id="@+id/openfile"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="5dp"
            android:padding="5dp"
            android:text="打开"
            android:textSize="25sp" />
    </LinearLayout>

    <Button
        android:id="@+id/deletefile"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="5dp"
        android:text="删除文件"
        android:textSize="25sp" />

    <EditText
        android:id="@+id/edit_filecontext"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="@android:drawable/edit_text"
        android:gravity="left"
        android:hint="请输入文件内容"
        android:padding="5dp"
        android:textSize="20sp" />

</LinearLayout>

四、 内部存储的其他方法

##1. 获取在其中存储内部文件的文件系统目录的绝对路径。

 getFilesDir()

##2. 在您的内部存储空间内创建(或打开现有的)目录。

 getDir()

3. 返回您的应用当前保存的一系列文件。

 fileList()
0人推荐
随时随地看视频
慕课网APP