Android中的文件存储

另见Android中的文件存储

一、前言

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

二、将数据存储到文件中

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

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical"
    android:layout_margin="5dp">
    <EditText
        android:id="@+id/beingSavedText"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="top"
        android:background="#87CEEB" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/save_text_btn"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="保存文本"/>
        <Button
            android:id="@+id/cancle_btn"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="取消保存"/>
    </LinearLayout>
</LinearLayout>

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();
            }
        }
    }
}

程序运行如图:

点击保存之前,可以看到,应用数据中并没有files目录,这是因为还未曾保存过文件,到保存的时候会自动创建。

现在,随便输入一些东西,点击“保存文本”,然后再次查看应用程序目录。

哇!多了一个files目录,并且目录下多了一个my_text文件,没错,这就是我们的记事本被保存的地方。现在查看一下文件的内容:

没错,刚刚我输入了“I‘m Prodigal”。下面我们来看看如何查看文件的内容吧!

三、从文本中读取数据

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

可以看到,这个方法只有需要传入一个参数,即要读取的文件的名字,然后系统会自动到/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();
        }
    }
}

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

Perfect!

原文地址:https://www.cnblogs.com/HenuAJY/p/10878135.html

时间: 2024-12-08 23:19:25

Android中的文件存储的相关文章

Android中的文件存储数据方式

转自以下文章: http://blog.csdn.net/zuolongsnail/article/details/6559338 http://blog.csdn.net/xiazdong/article/details/7687439 http://www.cnblogs.com/feisky/archive/2011/01/05/1926177.html 1.文件存储数据使用了Java中的IO操作来进行文件的保存和读取,只不过Android在Context类中封装好了输入流和输出流的获取方

Android中的文件存储技术

文件存储是每个系统都应该具有的功能,Android系统采用Java语言开发,所以它的文件存储功能基本上和J2SE一样的.为什么会引入文件存储?因为大文件.图片等我们若只存储在手机中很有限,一般都是用一个外存储设备进行存储.好了今天我们就讲讲用编程的方式在Android系统中进行存储. 文件存储的位置 一般文件默认存储在/data/data/<包>/files/***.***(针对我们开发的APK的时候),当然我们也可以存储在存储卡上(这个时候需要在androidManifest.xml 设定文

Android中的文件存储练习

1 package com.example.filedemo1; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.ByteArrayOutputStream; 6 import java.io.File; 7 import java.io.FileInputStream; 8 import java.io.FileNotFoundException; 9 import jav

Android中的文件读写总结

在Android中,文件主要分为两大类,内部存储和外部存储 内部存储的文件是程序私有的,分为普通文件和Cache文件 外部文件也可以是私有的,也可以是共有的,这要根据文件的目录位置来决定 共有文件可以用JAVA的文件处理方法来处理,但是内部文件必须用openfileinput或者openfileoutput来进行打开和关闭 在对SD卡上的文件进行操作之前需要先检查SD卡的状态(是否可读写,可访问等)

在android中读写文件

在android中读写文件 android中只有一个盘,正斜杠/代表根目录. 我们常见的SDK的位置为:/mnt/sdcard 两种最常见的数据存储方式: 一.内存 二.本地 1.手机内部存储 2.外部存储设备(SD卡) 在SD卡中读数据是不需要权限的,但是在SD卡中写数据是要权限的: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 读写文件的方式就是用的Java的文件

67.Android中的数据存储总结

转载:http://mp.weixin.qq.com/s?__biz=MzIzMjE1Njg4Mw==&mid=2650117688&idx=1&sn=d6c73f9f04d02ede7a741b45e801d74e#rd 本篇文章会帮助大家快速了解Android中各种数据存储机制的应用场景以及基本使用方法,力求在头脑中建立一个“目录”.有了这个目录,具体使用细节在实际应用时再查询文档即可得到. 0. 概述 Android为我们提供了以下存储机制: Shared Preferenc

Android笔记——Android中数据的存储方式(二)

我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效率.如果学过JavaWeb的朋友,首先可能想到的是数据库.当然了数据库是一个方案,那么是否还有其他的解决方案呢?今天我们在讲下Android笔记——Android中数据的存储方式(一) 提到的除了SharedPreferences和Files(文本文件)以外的其他几种数据储存方式:xml文件.SQL

Android中的File存储

关于Android的File存储,这里先说下Java中的File类,根据面向对象的思想,Java中对文件的操作也进行了对象的封装,这个操作文件的类就是File类,File提供了丰富的api来进行文件的操作,比如常见的createNewFile(),mkdir(),mkdirs(),exists(),isFile(),isDictory(),renameto(),delete(),getName(),getPath()....方法比较多,读者可以自行通过api文档查看,同样这一套的文件操作在And

Android中的数据存储

Android中的数据存储主要分为三种基本方法: 1.利用shared preferences存储一些轻量级的键值对数据. 2.传统文件系统. 3.利用SQLite的数据库管理系统. 对SharedPreferences对象和SQLite数据库,它们的数据仅对创建它们的应用是可访问的. (比如,MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE现在(since API 17)已经被标记为deprecated). 换句话说,它们不是共享的,如果需要在不同的应用之间