Android本地数据存储之.txt文件存储读写

转载请标明出处:http://blog.csdn.net/wu_wxc/article/details/49448977
本文出自【吴孝城的CSDN博客】

先说下Android中文件相关的操作:

openFileOutput(filename, mode)         打开文件输出流,就是往文件中写入数据,第二参数是模式,就是操作权限

openFileIntut(filename)                         打开文件输入流,将文件中的信息读取到程序中

getDir(name, mode)                               在app的data目录下获取或创建name对应的子目录

getFileDir()                                              获得app的data目录的file目录的绝对路径

String[] fileList()                                      返回app的data目录下的全部文件

deleteFile(filename)                               删除app的data目录下指定的文件 


文件的操作权限

Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件 

Context.MODE_PRIVATE:可写为0,私有方法,只有创建这个文件的程序才能访问,写入的数据会覆盖原文件的内容 

Context.MODE_WORLD_READABLE:可写为2当前文件可被其他文件读取 

Context.MODE_WORLD_WRITEABLE:可写为1,当前文件可被其他文件读取和写稿


在Android Studio中查看写入的文件的方法,打开

Tool >> Android >> Android Device >> Monitor


第一次打开会有一个发送什么到谷歌的,直接回车就行,

Android本地数据存储之.txt文件存储读写_第1张图片

打开后在DDMS >> File Explore >> data >> data >> (包名) >> files

默认是没有flses这个文件夹的

如果没有开模拟器的话,打开后看到的内容是空白的
可以点击右边指出的推送将选中的xml文件推到电脑上打开查看,也可点击拉入一个文件,可删除选中的文件,旁边的“+”只有在选中文件夹时才有效 

下面是一个小例子

activity_main.xml

<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/edit_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="请输入文件名"
        android:ems="10"
        android:layout_centerHorizontal="true"/>
    <EditText
        android:id="@+id/edit_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="请输入文件内容"
        android:ems="10"
        android:layout_marginTop="10dp"
        android:layout_below="@+id/edit_name"
        android:layout_centerHorizontal="true"/>

    <Button
        android:id="@+id/write"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/edit_text"
        android:layout_alignLeft="@+id/edit_text"
        android:text="写入"/>
    <Button
        android:id="@+id/reset"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/edit_text"
        android:layout_alignRight="@+id/edit_text"
        android:text="重置"/>
    <Button
        android:id="@+id/read"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/write"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="10dp"
        android:text="读取文件内容"/>

</RelativeLayout>

MainActivity.java

package cn.wuxiaocheng.filehelper;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.io.IOException;

public class MainActivity extends AppCompatActivity implements OnClickListener {

    private EditText editname;
    private EditText editdetail;
    private Button btnsave;
    private Button btnreset;
    private Button btnread;
    private Context mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //得到程序当前的Context,即MainActivity.this
        mContext = getApplicationContext();
        bindViews();
    }


    private void bindViews() {
        editname = (EditText) findViewById(R.id.edit_name);
        editdetail = (EditText) findViewById(R.id.edit_text);
        btnreset = (Button) findViewById(R.id.write);
        btnsave = (Button) findViewById(R.id.reset);
        btnread = (Button) findViewById(R.id.read);

        btnreset.setOnClickListener(this);
        btnsave.setOnClickListener(this);
        btnread.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.reset:
                //点击重置按钮,将两个输入框清空
                editdetail.setText("");
                editname.setText("");
                break;
            case R.id.write:
                //创建文件助手对象,传入mContext程序当前的内容
                FileHelper fHelper = new FileHelper(mContext);
                //获得文件名和写入内容
                String filename = editname.getText().toString();
                String filetext = editdetail.getText().toString();
                try {
                    //保存文件名和内容
                    fHelper.save(filename, filetext);
                    Toast.makeText(getApplicationContext(), "数据写入成功", Toast.LENGTH_SHORT).show();
                } catch (Exception e) {
                    //写入异常时
                    e.printStackTrace();
                    Toast.makeText(getApplicationContext(), "数据写入失败", Toast.LENGTH_SHORT).show();
                }
                break;
            case R.id.read:
                //定论一个detail,默认为空用来存放要输出的内容
                String detail = "";
                FileHelper fHelper2 = new FileHelper(getApplicationContext());
                try {
                    //得到输入框中文件名获得文件内容,因为可以写入多个不同名文件,所以要根据文件名来获得文件内容
                    String fname = editname.getText().toString();
                    //调用read()方法,传入上面获得的文件保,将返回的内容赋值给detail
                    detail = fHelper2.read(fname);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                Toast.makeText(getApplicationContext(), detail, Toast.LENGTH_SHORT).show();
                break;
        }
    }
}
FileHelper.java

package cn.wuxiaocheng.filehelper;

import android.content.Context;

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

/**
 * Created by Administrator on 2015/10/27.
 */
public class FileHelper {

    private Context mContext;

    //空参数构造函数,传入的值为空时,不出错
    public FileHelper() {
    }

    public FileHelper(Context mContext) {
        super();
        this.mContext = mContext;
    }

    /*
    * 定义文件保存的方法,写入到文件中,所以是输出流
    * */
    public void save(String name, String content) throws Exception {
        //Context.MODE_PRIVATE权限,只有自身程序才能访问,而且写入的内容会覆盖文本内原有内容
        FileOutputStream output = mContext.openFileOutput(name, Context.MODE_PRIVATE);
        output.write(content.getBytes());  //将String字符串以字节流的形式写入到输出流中
        output.close();         //关闭输出流
    }


    /*
    * 定义文件读取的方法
    * */
    public String read(String filename) throws IOException {
        //打开文件输入流
        FileInputStream input = mContext.openFileInput(filename);
        //定义1M的缓冲区
        byte[] temp = new byte[1024];
        //定义字符串变量
        StringBuilder sb = new StringBuilder("");
        int len = 0;
        //读取文件内容,当文件内容长度大于0时,
        while ((len = input.read(temp)) > 0) {
            //把字条串连接到尾部
            sb.append(new String(temp, 0, len));
        }
        //关闭输入流
        input.close();
        //返回字符串
        return sb.toString();
    }

}

界面如下,就不贴GIF了,可以将写入的文件发到桌面,打开查看
Android本地数据存储之.txt文件存储读写_第2张图片




源码下载




你可能感兴趣的:(Android中txt读写)