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

原创 2015年10月27日 15:57:05

转载请标明出处: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


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


打开后在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 Studio——android中的文件操作详解以及内部存储和外部存储

原文链接:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0923/1557.html 其实安卓文件的操作和ja...
  • oscar92420aaa
  • oscar92420aaa
  • 2015年12月15日 22:40
  • 11127

Android Studio 文件保存

File file = new File(Environment.getExternalStorageDirectory(),"info.txt");
  • ruthven1993
  • ruthven1993
  • 2016年07月16日 10:17
  • 439

Android Studio 缓存文件夹配置

参考:http://blog.csdn.net/qiujuer/article/details/44160127  http://blog.csdn.net/qiujuer/article/deta...
  • lxh19930428
  • lxh19930428
  • 2016年12月25日 14:24
  • 882

我的Android笔记(七)—— 读取txt文件内容

众所周知,Android的res文件夹是用来存储资源的,可以在res文件夹下建立一个raw文件夹,放置在raw文件夹下的内容会被原样打包,而不会被编译成二进制文件,并且可以通过R文件进行很方便地访问。...
  • barryhappy
  • barryhappy
  • 2012年03月17日 23:07
  • 58821

Android 读取TXt,按行读取

一个TXT 文件 对其进行读取,并且每行都单个存储读取public class MainActivity extends AppCompatActivity { private TextVie...
  • Damionew
  • Damionew
  • 2017年05月02日 22:08
  • 1298

Android创建txt文件并写入

有的时候后台返回的json数据太多,在控制台log日志打印时,一次性输出不全,网上有介绍使用log工具类,这里不再赘述。 我们用到另一种方法,把请求的得到的json数据写入txt文件:        ...
  • qq_31471291
  • qq_31471291
  • 2017年08月10日 13:35
  • 1923

Android 建立文件夹、生成文件并写入文本文件内容

一、首先添加权限   二、建立文件夹、生成文件并写入文本文件内容代码   private void initData() {     String filePath = "/sdca...
  • yangshuolll
  • yangshuolll
  • 2016年08月15日 17:59
  • 2947

Android 建立文件夹、生成文件并写入文本文件内容

From:http://blog.csdn.net/worldmakewayfordream/article/details/52213396 一、首先添加权限   Androi...
  • It_BeeCoder
  • It_BeeCoder
  • 2017年01月11日 21:37
  • 1014

android文件的写入与读取---简单的文本读写context.openFileInput() context.openFileOutput()

最终效果图,点击save会保存到文件中,点击show会从文件中读取出内容并显示。main.xml...
  • chenzheng_java
  • chenzheng_java
  • 2011年02月28日 22:27
  • 60909

Android追加写入文件的几种方法

import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.FileWriter; imp...
  • ZHOU452840622
  • ZHOU452840622
  • 2016年07月12日 18:09
  • 3973
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android本地数据存储之.txt文件存储读写
举报原因:
原因补充:

(最多只允许输入30个字)