Android 文件数据存储实例详解
作者:lqh 发布时间:2023-07-28 17:08:03
Android之文件数据存储
一、文件保存数据介绍
Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。文件可用来存放大量数据,如文本、图书、音频等。
File对象适合按照从开始到结束的顺序不跳过地读取或写入大量数据。例如,它适合于图片文件或通过网络交换的任何内容。
数据存储的默认位置:/data/data/<包名>/files/***.***。
所有的Android设备都有两个文件存储区域:“内部”和“外部”存储。这篇文章主要是将数据存储,所以在“内部”存储区域存储文件。
二、使用方法
1. 向文件写入内容
try {
FileOutputStream fos = mContext.openFileOutput(mFileName,Context.MODE_PRIVATE);
fos.write(info.getBytes());
fos.close();
}catch (Exception e){
e.printStackTrace();
}
openFileOutput()方法的第一个参数用于指定文件名称,不能包含路径分割符"/",如果文件不存在,Android会自动创建它,openFileOutput()方法的第二个参数用于指定操作模式。
操作模式有:
Context.MODE_PRIVATE = 0:为默人操作模式,代表改文件时私有数据,只能被应用本身访问,在改模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中,可以使用Context.MODE_APPEND。
Context.MODE_APPEND = 32768 :模式会检查文件是否存在,存在就往文件追加,否则就创建新文件。
Context.MODE_WORLD_READABLE与Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写文件。
Context.MODE_WORLD_READABLE = 1 :表示当前文件可以被其他应用读取。
Context.MODE_WORLD_WRITEABLE = 2 :表示当前文件可以被其他应用写入。
如果希望文件被其他应用读和写,可以传入Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE。Android有一套自己的安全模型,当应用(.apk)在安装中系统就会分配给它一个userid,当该因公要去访问其他资源比如文件的时候,就需要userid匹配,默认情况下,任何应用创建的文件、SharedPrefrences、数据库应该都是私有的,其他程序无法访问。除非在创建的时候制定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE,只有这样其他程序才能正常访问。
2. 读入文件内容
try {
FileInputStream fis = mContext.openFileInput(mFileName);
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
String info = reader.readLine();
fis.close();
return info;
}catch (Exception e){
e.printStackTrace();
}
三、小案例
1.添加strings.xml文件
<string name="write_data">写入数据</string>
<string name="read_data">读取数据</string>
<string name="file">File</string>
2.修改activity_main.xml文件
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/file"
android:layout_gravity="center_horizontal"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="@dimen/fab_margin"
android:layout_marginBottom="@dimen/fab_margin"
>
<Button
android:id="@+id/file_write"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:text="@string/write_data" />
<Button
android:id="@+id/file_read"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:text="@string/read_data" />
</LinearLayout>
3.添加FileDBManager类
package com.zhangmiao.datastoragedemo;
import android.content.Context;
import android.os.Environment;
import android.util.Log;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
/**
* Created by zhangmiao on 2016/12/20.
*/
public class FileDBManager {
private File mFile;
private Context mContext;
private String mFileName = "myfile";
public FileDBManager(Context context){
mContext = context;
}
public void write(String info){
try {
FileOutputStream fos = mContext.openFileOutput(mFileName,Context.MODE_PRIVATE);
fos.write(info.getBytes());
fos.close();
}catch (Exception e){
e.printStackTrace();
}
}
public String read(){
try {
FileInputStream fis = mContext.openFileInput(mFileName);
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
String info = reader.readLine();
fis.close();
return info;
}catch (Exception e){
e.printStackTrace();
}
return "";
}
}
4.修改MainActivity
package com.zhangmiao.datastoragedemo;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {private FileDBManager mFileManager;private TextView mTableInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mFileManager = new FileDBManager(this);
mTableInfo = (TextView) findViewById(R.id.table_info);
fileWrite.setOnClickListener(this);
fileRead.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.file_write:
mFileManager.write("hello world!");
break;
case R.id.file_read:
mTableInfo.setText(mFileManager.read());
break;default:break;
}
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:http://www.cnblogs.com/zhangmiao14/p/6208503.html
猜你喜欢
- 1.多数据源配置类整体项目结构1).pom.xml 项目依赖<?xml version="1.0" encodin
- 图像滤波在opencv中可以有多种实现形式自定义滤波如使用3×3的掩模:对图像进行处理.使用函数filter2D()实现#include&l
- C#串口模块的使用。使用VS .net框架下WinForm程序应用开发。C#开发的串口通信小工具。相比于QT添加的串口类,WinForm是通
- 前言本文的记录如何用CustomPaint、GestureDetector实现一个进度条控件。首先需要说明的是 flutter Materi
- 本篇给大家详细讲解了MTKAndroid平台开发流程,大致分为44个步骤,我们把每个步骤的命令详细讲解了下,一起来学习下。1.拷贝代码仓库从
- 好久没有做web了,JSON目前比较流行,闲得没事,所以动手试试将对象序列化为JSON字符(尽管DotNet Framework
- 具体可见http://developer.android.com/tools/debugging/ddms.html。 DDMS为IDE和e
- 本文实例为大家分享了Unity实现场景漫游相机的具体代码,供大家参考,具体内容如下前言拿到场景后总喜欢在场景里面玩一段时间,那这个脚本就是你
- 对于大文件的处理,无论是用户端还是服务端,如果一次性进行读取发送、接收都是不可取,很容易导致内存问题。所以对于大文件上传,采用切块分段上传,
- /// <summary> /// 遍历Co
- 1、取得控制台应用程序的根目录方法方法1、Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径方法
- 多数据源创建数据库CREATE DATABASE mybatis_plus_1;USE mybatis_plus_1;CREATE TABL
- 本文为大家分享一个非常简单但又很常用的控件,跑马灯状态的TextView。当要显示的文本长度太长,又不想换行时用它来显示文本,一来可以完全的
- 一、SpringCache介绍Spring Cache 是一个优秀的缓存组件。自Spring 3.1起,提供了类似于@Transaction
- 一. 线性表中的顺序表线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见
- 需求说明实际操作过程中,从D盘根目录下的ak.txt读取文件写入D盘根目录下的hello.txt文件内实现思路写两个方法,一个用于读取目标文
- 多选和单选的不同之处单选的时候,选中一个就可以直接把结果返回,因此本身底部弹窗无需状态管理。但到多选的时候,需要知道当前选中的选项,有选项被
- mkdir函数用于创建目录。格式如下:#include<sys/types.h>#include<sys/stat.h&g
- 十六进制字符串与数值类型之间转换(C# 编程指南) 以下示例演示如何执行下列任务: 获取字符串中每个字符的十六进制值。 获取与十六进制字符串
- 前言为什么用动静态库我们在实际开发中,经常要使用别人已经实现好的功能,这是为了开发效率和鲁棒性(健壮性);因为那些功能都是顶尖的工程师已经写