android I/0流操作文件(文件存储)
文件存储方式不受类型限制,可以将一些数据直接以文件的形式保存在设备中,例如文本文件、PDF ,音频,图片等。存储类型复杂的数据时,通常采用文件存储。Java提供一套完整的I/О流体系,通过I/О流可以非常方便地访问磁盘中的文件,同样Android 也支持I/O流方式来访问手机等移动设备中的存储文件。
I/0流操作文件进行I/О流操作文件时,需要先获得文件的输人流和输出流。在Android应用程序中,可以通过上下文环境Context对象提供的openFileInput()和 openFileOuput()两个方法分别来获得文件的输入流和输出流,这两个方法的具体介绍如下。
FilelnputStream openFileInput(String name): 用于获取应用程序的数据文件夹下指定name文件名的标准文件输入流,以便读取设备中的文件。 FileOutputStream openFileOuput(String name, int mode): 用于获取应用程序的数据文件夹下指定name文件名的标准文件输出流,以便将数据写入设备的文件中。其中 openFileOutput()方法的第二个参数mode用于指定输出流的模式,即打开文件进行操作的模式。Context类中提供了4个静态常量用于表示不同的输出模式,如下表所示。
4种文件读写模式
模式 功能描述 Context.MODE_PRIVATE 私有模式,该模式所创建的文件都是私有文件,只能被应用本身所访问。因此,该模式下所写入的内容会覆盖原来文件的内容 Context. MODE_APPEND 附加模式,该模式首先会检查文件是否存在,若文件不存在,则创建新文件;若文件存在,则在原文件的末尾追加内容 Context.MODE_WORLD_READABLE 可读模式,该模式的文件可以被其他应用程序读取 Context.MODE_WORLD_WRITABLE 可写模式,该模式的文件可以被其他应用程序读写除此之外,Context上下文对象还提供了一些方法来访问应用程序的数据文件夹,如下表所示。
访问数据文件夹的方法
方法 功能描述 File getDir(String name, int mode) 在应用程序的数据文件夹下获取或创建name对应的子目录 File getFilesDir() 获取应用程序的数据文件夹的绝对路径 String[] fileList() 返回应用程序的数据文件夹下的所有文件 boolean deleteFile( String name) 删除应用程序的数据文件夹下的指定文件下面通过代码演示如何使用I/O流对文件进行读写操作
创建xml布局文件
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'> <!-- 编辑输入框,宽度适应线性布局变化,高度适应自己,设置显示行数为四行 --> <EditTextandroid: android:layout_width='match_parent'android:layout_height='wrap_content'android:lines='4'/> <!-- 保存文件按钮,宽度,高度适应自己,按钮文本显示--> <Buttonandroid: android:layout_width='wrap_content'android:layout_height='wrap_content'android:text='保存文件'/> <!-- 编辑显示框,宽度适应线性布局变化,高度适应自己,设置光标不可见,不可编辑,行数为4--> <EditTextandroid: android:layout_width='match_parent'android:layout_height='wrap_content'android:cursorVisible='false'android:editable='false'android:lines='4'/> <!-- 读取文件按钮宽度,高度适应自己,按钮文本显示--> <Buttonandroid: android:layout_width='wrap_content'android:layout_height='wrap_content'android:text='读取文件'/></LinearLayout>
上述界面布局比较简单,只包含两个文本框和两个按钮,分别用于保存文件和读取文件两种操作。
接着创建Activity程序
activity代码如下
package com.example.wenjiancuncu;import android.content.Context;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.PrintStream;public class FileIOActivity extends AppCompatActivity { private EditText editFileIn, editFileOut; //声明两个文本框 private Button btnRead, btnWrite; //声明两个按钮 final String FILE_NAME = 'qstIO.txt'; //指定文件名 @Override //重写父类方法 public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); //调用父类方法setContentView(R.layout.activity_file_io); //设置布局//获取两个文本框editFileIn = (EditText) findViewById(R.id.editFileIn);editFileOut = (EditText) findViewById(R.id.ediFileOut);//获取两个按钮Button btnRead = (Button) findViewById(R.id.btnRead);Button btnWrite = (Button) findViewById(R.id.btnWrite);//以匿名类的形式设置btnRead按钮的事件监听器btnRead.setOnClickListener(new View.OnClickListener() { @Override //重写接口方法 public void onClick(View v) {//读取指定文件中的内容,并在editFileIn文本框中显示出来editFileIn.setText(read()); }});//以匿名类的形式设置btnWrite按钮的事件监听器btnWrite.setOnClickListener(new View.OnClickListener() { @Override //重写接口方法 public void onClick(View v) {write(editFileOut.getText().toString()); //将editFileOut中的内容写入文件中editFileOut.setText(''); //清空editFileOut文本框中的内容 }}); } private String read() {try { FileInputStream fis = openFileInput(FILE_NAME); //打开文件输入流 byte[] buff = new byte[1024]; //定义一个字节缓存数组 int hasRead = 0; StringBuilder sb = new StringBuilder(''); //创建可变字符串 //读取文件内容 while ((hasRead = fis.read(buff)) > 0) {//把字节数组转化为字符串并添加到可变字符串中sb.append(new String(buff, 0, hasRead)); } fis.close(); //关闭文件输入流 return sb.toString(); //返回一个字符串}catch (Exception e) { e.printStackTrace();}return null; } private void write(String content) {try { //以追加模式打开文件输出流 FileOutputStream fos = openFileOutput(FILE_NAME, Context.MODE_APPEND); PrintStream ps = new PrintStream(fos); //将FileOutStream包装成PrintStream ps.println(content); //输出文件内容 ps.close(); //关闭文件输出流 //使用Toast显示保存成功 Toast.makeText(FileIOActivity.this,'保存成功', Toast.LENGTH_LONG).show();}catch (Exception e) { e.printStackTrace();} }}
上述代码的核心操作就是文件的保存和读取,其中read()和 write()两个方法分别用于读文件和写文件操作;代码中分别对btnRead 和 btnWrite按钮设置了事件监听器,并在事件处理方法中调用相应的read()或write()方法实现文件的读取或保存。
在AndroidMainfest中声明Activity
运行结果
Android应用程序的数据文件默认保存在/data/data/包名/files目录下。在 AndroidDevice Monitor的 File Explorer选项卡中,展开/data/data/com. 包名/files目录,在该目录下可以看到保存的qstIO.txt 数据文件,如下图所示。
这篇关于微信demo的文章就到这里了,希望大家可以多多关注好吧啦网的更多精彩内容!
相关文章: