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. “Activity_11\src\yan\activity_11\MainActivity.java”pack
- 本文实例讲述了Java实现的微信公众号获取微信用户信息。分享给大家供大家参考,具体如下:注: 这里获取用户信息方式和网页授权获取
- state:比较常用,各种状态都可以用它,但是它更着重于一种心理状态或者物理状态。Status:用在人的身上一般是其身份和地位,作“状态,情
- 本文实例为大家分享了Android实现蒙板效果的相关代码,供大家参考,具体内容如下1、不保留标题栏蒙板的实现效果:原理:1、弹窗时,设置背景
- 目录前言生活中的Future模式场景1:场景2Future模式中的主要角色实现一个简单的Future模式Java中的Future模式Futu
- 在mybatis中sql是写在xml映射文件中的,如果sql中有一些特殊字符的话,在解析xml文件的时候就会被转义,如若不希望被转义,那该怎
- 前言如果在开发过程中,你还在靠查看服务器日志来寻找服务与服务之间的报错信息,那么这篇一定要来看下,通常在我们开发环境自测的时候,我们会将代码
- 一、使用无参构造方法创建二、使用静态工厂创建三、使用实例工厂创建来源:https://www.cnblogs.com/jock766/p/1
- SQLite是Android自带的关系型数据库,是一个基于文件的轻量级数据库。Android提供了3种操作数据的方式,SharedPrefe
- 删除以逗号隔开的字符串中某一个值例如要删除 “1,2,3,4” 中的 2,返回 &ldquo
- 用函数指针变量调用函数指针变量也可以指向一个函数。一个函数在编译时被分配给一个入口地址。这个函数入口地址就称为函数的指针。可以用一个指针变量
- 哈喽大家好啊,我是Hydra。Spring作为项目中不可缺少的底层框架,提供的最基础的功能就是bean的管理了。bean的注入相信大家都比较
- 前言:在我们使用C# WinForm中,我们有时候是需要或者自己本机的IP地址进行处理,今天我们学习一下如何使用C# Winform获取主机
- Android前段和后端接口进行交互时,经常会遇到特殊字符,比如表情、特殊标点等,这样在Url中是无法识别的,需要进行转码,后端进行解码交互
- 以下教程是小编在参与开发公司的一个crm系统,整理些相关资料,在该系统中有很多消息推送功能,在其中用到了websocket技术。下面小编整理
- 本文实例讲述了Android开发使用Handler的PostDelayed方法实现图片轮播功能。分享给大家供大家参考,具体如下:第一步:创建
- 一篇小白也能看懂的查找游戏物体的方式解析 – Unity 之 查找物体的几种方式。本文通过实际测试得出使用结论,大家进行简单记录,在使用时想
- C#将DLL打包到程序中有时候我们的程序中包含一些添加的DLL文件,使用起来不方便,我们可以把这些DLL文件打包到程序集中,只剩下一个EXE
- 什么是泛型Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了 编译时类型安全监测机制,该机制允许我们在编译时检测到非法
- C# 字符串进制转换/// <summary> /// 进制转换 &nbs