本文共 6145 字,大约阅读时间需要 20 分钟。
Android应用中常需要将程序数据持久化存储,openFileOutput()方法提供了一种简单的方式来创建或打开文件进行写入操作。本文将详细讲解如何使用此方法,包括文件存储的注意事项以及读取存储内容的实现方法。
openFileOutput()方法用于在应用的默认文件目录下创建或打开文件进行写入操作。该方法的主要用途是将程序数据持久化存储,如用户输入、偏好设置等。
参数一:文件名
文件名应为简单的文字名称,不包含路径分隔符(如"/")。系统会自动生成存储路径:data/data/参数二:操作模式
操作模式决定文件的访问权限和写入行为。常用模式包括:建议在开发中尽量使用默认模式(MODE_PRIVATE),以确保文件的安全性。若需要其他应用访问文件,则需明确指定相应的模式。
文件将被存储在以下路径下:data/data/
package org.day13_filesave;import java.io.BufferedReader;import java.io BufferedWriter;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.Menu;import android.widget.EditText;public class MainActivity extends Activity { private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = (EditText) findViewById(R.id.editText); } @Override protected void onDestroy() { super.onDestroy(); String data = editText.getText().toString(); save(data, "fileName.txt"); } public void save(String data, String name) { FileOutputStream fos = null; BufferedWriter bw = null; try { fos = openFileOutput(name, Context.MODE_PRIVATE); bw = new BufferedWriter(new OutputStreamWriter(fos)); bw.write(data); bw.flush(); } catch (Exception e) { e.printStackTrace(); } finally { if (bw != null) { try { bw.close(); } catch (IOException e) { e.printStackTrace(); } } } }} 为了实现读取存储内容的功能,需使用openFileInput()方法,它返回FileInputStream对象,用于读取文件内容。
openFileInput()方法与openFileOutput()类似,用于打开文件进行读取操作。其参数仅文件名,系统自动生成存储路径。
public String load(String fileName) { FileInputStream fis = null; BufferedReader br = null; StringBuilder content = new StringBuilder(); try { fis = openFileInput(fileName); br = new BufferedReader(new InputStreamReader(fis)); String line = ""; while ((line = br.readLine()) != null) { content.append(line); } return content.toString(); } catch (Exception e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } return null;} 在上述基础上,可以通过读取存储文件内容,将其恢复到EditText中,提升用户体验。
private void initViews() { editText = (EditText) findViewById(R.id.editText); String inputText = load("fileName.txt"); if (!TextUtils.isEmpty(inputText)) { editText.setText(inputText); editText.setSelection(inputText.length()); Toast.makeText(this, "恢复数据成功!", 0).show(); }} package org.day13_filesave;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io OutputStreamWriter;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.text.TextUtils;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity { private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); } private void initViews() { editText = (EditText) findViewById(R.id.editText); String inputText = load("fileName.txt"); if (!TextUtils.isEmpty(inputText)) { editText.setText(inputText); editText.setSelection(inputText.length()); Toast.makeText(this, "恢复数据成功!", 0).show(); } } @Override protected void onDestroy() { super.onDestroy(); String data = editText.getText().toString(); save(data, "fileName.txt"); } public void save(String data, String name) { FileOutputStream fos = null; BufferedWriter bw = null; try { fos = openFileOutput(name, Context.MODE_PRIVATE); bw = new BufferedWriter(new OutputStreamWriter(fos)); bw.write(data); bw.flush(); } catch (Exception e) { e.printStackTrace(); } finally { if (bw != null) { try { bw.close(); } catch (IOException e) { e.printStackTrace(); } } } } public String load(String fileName) { FileInputStream fis = null; BufferedReader br = null; StringBuilder content = new StringBuilder(); try { fis = openFileInput(fileName); br = new BufferedReader(new InputStreamReader(fis)); String line = ""; while ((line = br.readLine()) != null) { content.append(line); } return content.toString(); } catch (Exception e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; }} 通过以上方法,开发者可以方便地在Android应用中实现文件的存储与读取,提升用户体验。
转载地址:http://nrvk.baihongyu.com/