博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中的文件存储
阅读量:4703 次
发布时间:2019-06-10

本文共 6402 字,大约阅读时间需要 21 分钟。

另见

一、前言

文件存储时Android中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动地保存到文件当中的,因此它比较适合用于存储一些简单的文本数据或二进制数据。

二、将数据存储到文件中

Context类中提供了一个openFileOutput()方法,可以用于将数据存储到指定的文件中。

Avartar
可以看到,此方法接收两个参数,第一个即是文件的名字,这里不可以包含文件路径,所有的文件都是默认存储到/data/data//files/目录下的。第二个参数是文件的操作模式,主要有两种可以选择,MODE_PRIVATEMODE_APPEND,其中MODE_PRIVATE 是默认的操作模式,表示当指定同样文件名的时候,所写入的内容将会覆盖原文件中的内容,而MODE_APPEND则表示如果该文件存在,就往文件里面追加内容,不存在就创建新文件。
下面,做一个简单的记事本Demo应用一下。
activity_main.xml

MainActivity.java

package com.henuajy.savetextdemo;import android.content.Context;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;public class MainActivity extends AppCompatActivity {    private String fileName = "my_text";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        text = findViewById(R.id.beingSavedText);        Button save_text_btn = findViewById(R.id.save_text_btn);        save_text_btn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                String data = text.getText().toString();                saveText(data);            }        });    }    public void saveText(String data){        FileOutputStream os = null;        OutputStreamWriter oswriter = null;        BufferedWriter writer = null;        try {            os = openFileOutput(fileName,Context.MODE_APPEND);            oswriter = new OutputStreamWriter(os);            writer = new BufferedWriter(oswriter);            writer.write(data);        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }finally {            try {                if (writer!=null){                    writer.close();                }                if(oswriter!=null){                    oswriter.close();                }                if (os!=null){                    os.close();                }                Toast.makeText(MainActivity.this,"保存成功",Toast.LENGTH_SHORT).show();            } catch (IOException e) {                e.printStackTrace();            }        }    }}

程序运行如图:

Avatrar
点击保存之前,可以看到,应用数据中并没有files目录,这是因为还未曾保存过文件,到保存的时候会自动创建。
Avatrar
现在,随便输入一些东西,点击“保存文本”,然后再次查看应用程序目录。
Avatrar
哇!多了一个files目录,并且目录下多了一个my_text文件,没错,这就是我们的记事本被保存的地方。现在查看一下文件的内容:
Avatrar
没错,刚刚我输入了“I'm Prodigal”。下面我们来看看如何查看文件的内容吧!

三、从文本中读取数据

类似于将数据存储到文件中,Context类中还提供了一个openFileInput()方法,用于从文件中读取数据。

Avatrar
可以看到,这个方法只有需要传入一个参数,即要读取的文件的名字,然后系统会自动到/data/data//files/目录下去加载这个文件,并返回一个FileInputStream对象。
对app进行改进,使其在加载时自动载入已存在的文件。
MainActivity.java

package com.henuajy.savetextdemo;import android.content.Context;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;public class MainActivity extends AppCompatActivity {    private EditText text;    private String fileName = "my_text";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        text = findViewById(R.id.beingSavedText);        String beingLoadContent = loadText();        if (beingLoadContent!=null){            text.setText(beingLoadContent);        }        Button save_text_btn = findViewById(R.id.save_text_btn);        save_text_btn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                String data = text.getText().toString();                saveText(data);            }        });    }        public void saveText(String data){        FileOutputStream os = null;        OutputStreamWriter oswriter = null;        BufferedWriter writer = null;        try {            os = openFileOutput(fileName,Context.MODE_APPEND);            oswriter = new OutputStreamWriter(os);            writer = new BufferedWriter(oswriter);            writer.write(data);        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }finally {            try {                if (writer!=null){                    writer.close();                }                if(oswriter!=null){                    oswriter.close();                }                if (os!=null){                    os.close();                }                Toast.makeText(MainActivity.this,"保存成功",Toast.LENGTH_SHORT).show();            } catch (IOException e) {                e.printStackTrace();            }        }    }    public String loadText(){        FileInputStream is = null;        InputStreamReader isreader = null;        BufferedReader reader = null;        StringBuilder textContent = new StringBuilder();        try{            is = openFileInput(fileName);            isreader = new InputStreamReader(is);            reader = new BufferedReader(isreader);            String line = "";            while((line=reader.readLine())!=null){                textContent.append(line);            }        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }finally {            try {                if (reader!=null){                    reader.close();                }                if (isreader!=null){                    isreader.close();                }                if (is!=null){                    is.close();                }            } catch (IOException e) {                e.printStackTrace();            }            return textContent.toString();        }    }}

接着上一步,保存后,完全退出此程序,然后再次进入。

Avartar
Perfect!

转载于:https://www.cnblogs.com/HenuAJY/p/10878135.html

你可能感兴趣的文章
UVA 116 Unidirectional TSP (白书dp)
查看>>
第三方测速工具
查看>>
数据访问 投票习题
查看>>
cnblog!i'm coming!
查看>>
使用点符号代替溢出的文本
查看>>
fatal: remote origin already exists.
查看>>
LeetCode 242. Valid Anagram
查看>>
JSP表单提交乱码
查看>>
如何适应现代雇佣关系
查看>>
团队项目(第五周)
查看>>
SQL 优化经验总结34条
查看>>
开源 视频会议 收藏
查看>>
核心J2EE模式 - 截取过滤器
查看>>
.net开源CMS
查看>>
JdbcTemplate
查看>>
第一次使用maven记录
查看>>
SharePoint服务器端对象模型 之 使用CAML进展数据查询
查看>>
Building Tablet PC Applications ROB JARRETT
查看>>
Adobe® Reader®.插件开发
查看>>
【POJ 3461】Oulipo
查看>>