Android 数据存储方式有哪几种

作者:doodle777 时间:2023-12-10 17:20:16 

以下内容给大家介绍Android数据存储提供了五种方式:

1、SharedPreferences

2、文件存储

3、SQLite数据库

4、ContentProvider

5、网络存储

本文主要介绍如何使用文件来存储数据。Android文件操作用到的是Java.IO中的FileOutputStream和FileInputStream类。

一、存储文件

首先实例化一个FileOutputStream。

FileOutputStream foStream = openFileOutput(fileName, MODE_PRIVATE);
// fileName: 要写入文件的名称
// MODE_PRIVATE: 为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
// MODE_APPEND: 模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.
// MODE_WORLD_READABLE: 表示当前文件可以被其他应用读取,不推荐使用
// MODE_WORLD_WRITEABLE: 表示当前文件可以被其他应用写入,不推荐使用

然后调用foStream.write()即可完成写入。

byte[] buffer = fileContent.getBytes();
foStream.write(buffer);
Toast.makeText(MainActivity.this, "写入成功",Toast.LENGTH_SHORT).show();

最后进行一些清理工作,刷新写出流和关闭流。

foStream.flush();
foStream.close();

二、读取文件

同样的,首先实例化一个FileInputStream。

FileInputStream fiStream = openFileInput(fileName)

然后调用fiStream.read()即可

int len = fiStream.available();
byte[] buffer = new byte[len];
fiStream.read(buffer)

最后,将文本显示并关闭读文件流

etContent.setText(new String(buffer));
Toast.makeText(MainActivity.this, "读取成功",Toast.LENGTH_SHORT).show();
fiStream.close();

三、完整代码


import android.support.v.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.FileInputStream;
import java.io.FileOutputStream;
public class MainActivity extends AppCompatActivity {
  private EditText etName;
  private EditText etContent;
  private Button btnWrite;
  private Button btnRead;
  private String fileName = "";
  private String fileContent = "";
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    etName = (EditText)findViewById(R.id.etName);
    etContent = (EditText)findViewById(R.id.etContent);
    btnWrite = (Button)findViewById(R.id.btnWrite);
    btnRead = (Button)findViewById(R.id.btnRead);
    btnWrite.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        fileName = etName.getText().toString();
        fileContent = etContent.getText().toString();
        try {
          FileOutputStream foStream = openFileOutput(fileName, MODE_PRIVATE);
          byte[] buffer = fileContent.getBytes();
          foStream.write(buffer);
          Toast.makeText(MainActivity.this, "写入成功",Toast.LENGTH_SHORT).show();
          foStream.flush();
          foStream.close();
        }catch(Exception e){
          e.printStackTrace();
        }
      }
    });
    btnRead.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        fileName = etName.getText().toString();
        try{
          FileInputStream fiStream = openFileInput(fileName);
          int len = fiStream.available();
          byte[] buffer = new byte[len];
          fiStream.read(buffer);
          etContent.setText(new String(buffer));
          Toast.makeText(MainActivity.this, "读取成功",Toast.LENGTH_SHORT).show();
          fiStream.close();
        }catch(Exception e){
          e.printStackTrace();
        }
      }
    });
  }
}
<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:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
  <EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/etName"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:text="文件名" />
  <EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/etContent"
    android:layout_below="@+id/etName"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:text="文件内容" />
  <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="保存"
    android:id="@+id/btnWrite"
    android:layout_alignTop="@+id/btnRead"
    android:layout_toLeftOf="@+id/btnRead"
    android:layout_toStartOf="@+id/btnRead" />
  <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="读取"
    android:id="@+id/btnRead"
    android:layout_below="@+id/etContent"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" />
</RelativeLayout>
标签:android,数据存储,方式
0
投稿

猜你喜欢

  • Java字母加数字组合比较大小

    2023-02-27 15:27:52
  • SpringBoot实现配置文件的替换

    2023-11-21 22:27:16
  • c# WinForm制作图片编辑工具(图像拖动、缩放、旋转、抠图)

    2022-05-20 12:32:40
  • Java实现多任务执行助手

    2023-05-17 14:15:30
  • Android开发实现圆形图片功能示例

    2023-07-12 08:43:54
  • Java 基础语法

    2021-09-21 19:26:32
  • Java Volatile 变量详解及使用方法

    2023-03-13 13:27:10
  • Jetpack Compose修饰符专项精讲

    2021-11-28 06:33:21
  • .net实现序列化与反序列化实例解析

    2022-08-05 06:42:08
  • 学习Java的9张思维导图

    2021-06-10 03:38:18
  • Java设计模式之装饰者模式详解

    2021-08-16 03:00:17
  • Java实现飞机航班管理系统的思路详解

    2022-08-20 19:48:42
  • java8新特性之日期时间API

    2023-06-20 09:15:50
  • java实现给图片加铺满的网格式文字水印

    2023-07-30 05:22:12
  • Java使用POI导出Excel(二):多个sheet

    2022-11-26 02:09:44
  • Android控件之SeekBar的用法总结

    2022-10-25 00:15:38
  • C#模板方法模式(Template Method Pattern)实例教程

    2022-09-12 02:59:23
  • flutter BottomAppBar实现不规则底部导航栏

    2023-06-19 23:40:19
  • Android使用GridView实现表格分割线效果

    2022-05-12 06:59:54
  • 极简的Resty服务端和客户端RESTful框架

    2022-01-19 19:51:00
  • asp之家 软件编程 m.aspxhome.com