IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android之文件存储 -> 正文阅读

[移动开发]Android之文件存储

利用 SharedPreferences 来保存数据固然有其简单轻便的优势,但是当数据较大时使用 SharedPreferences 就不合适了,此时一般选择使用文件存储。

在应用私有文件夹中读写数据

在介绍如何在Android 平合下进行文件存储之前有必要了解 Android 平台下的数据存储规则。在其他的操作系统如 Windows 平台下,应用程序可以自由地或者在特定的访问权限基础上访问或修改其他应用程序名下的文件等资源,而??????????在 Android 平台下,一个应用程序中所有的数据都是私有的。

当应用程序被安装到系统中后,其所在的包会有一个文件夹用于存放自己的数据,只有这个应用程序才有对这个文件夹的写入权限,这个私有的文件夹位于 Android 系统的"data\data\<包名>files\"目录下,其他的应用程序都无法在这个文件夹中写入数据。除了存放私有的数据文件夹外,应用程序也具有 SDCard卡的写入权限。

使用文件I/O 方法可以直接往手机中存储数据,默认情况下这些文件不可以被其他应用程序访问。Android 平台支持 Java 平台下的文件 I/O 操作,主要使用 FilelnputStream 和 FileOutputStream 这两个类来实现文件的存储与读取。获取这两个类对象的方式有两种。

第一种方式就是像 Java平台下的实现方式一样通过构造器直接创建,如果需要向打开的文件末尾写入数据,可以通过使用构造器 FileOutputStream(File file,boolean append)将 append设置为 true 来实现。

第二种获取 FileInputStream 和 FileOutputStream 对象的方式是调用 Context.openFilelnput(String filename)和 Context.openFileOutput(String name,int mode)方法来创建。

在实际的 Android 开发实践中,使用第二种方式的并不多,在以往的 Android 开发类书籍里也很少有人提及这种方式。这是因为在前几年的环境下 Android 手机的机身内存还是较小的,需要借助于 SDCard,多数的文件读写操作都是针对 SDCard 的,而它只能读写位于"\data\data\<包名>\files\"下的文件,所以这种文件操作方式肯定是不合适的。但是,发展到今天,Android 手机的机身内存已足够大,不需要外加 SDCard,甚至很多手机都已经不支持 SDCard 了。智能手机的发展使得这种操作文件读写的方式变得实用了。

相信读者在 Java SE 的学习中已经熟悉了第一种方式,所以这里主要以第二种方式来进行实例讲解。其中,Context 对象提供的几个主要用于对文件操作的方法方法名

openFilelnput(String filename)

打开应用程序私有目录下的指定私有文件以读入数据,返回一个FilelputStream 对象

openFileOutput(String name,it mode)

打开应用程序私有目录下的指定私有文件以写入数据,返回一个

FileOutputStream 对象,如果文件不存在就创建这个文件

搜索应用程序私有文件夹下的私有文件,返回所有文件名的 String 数组

deleteFile(String fileName)删除指定文件名的文件,成功返回true,失败返回 false

在上述方法中,openFileOutput(String?name,in t mode)的第二个参数指的是读取权限,这里的权限参数和 SharedPreferences 的参数一样,有如下 4 种∶

Conext.MODE_PRVATE∶指定 ShardPrefreces 数据只能被本应用程序读、写。Comex.MODE_APPEND∶检查文件是否存在,存在就向文件中追加内容,否则创建新文件

Conext.MODE_WORLD_READABLE∶指定 SharedPrefernces 数据能被其他应用程序读,但不能写。

Context.MODE_WORLD_WRITEABLE∶指定 SharedPreferences数据能被其他应用程序读、写

下面用实例来说明Android平台下的文件IO 操作方式,主要实现的功能很简单,就是在应用程序私有的数据文件夹下创建一个文件并读取其中的数据显示到屏幕的TextView中。在实例中,包括一个Activiy类和对应的布局文件,以及一个文件读写类。在Activity 中操作该文件读写类,先将文本写入文件,再从文件中读出来并展示到TextView 中。

布局文件代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">

    <TextView
        android:id="@+id/filetext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="25dp"/>

</RelativeLayout>
Activity代码如下:
package com.rfstar.filesavetest;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String message="大家好,这里是大鸟科创空间";
        HandFile handFile=new HandFile(this);
        handFile.writeFileData("file",message);
        String result=handFile.readFileData("file");
        TextView textView=(TextView)findViewById(R.id.filetext);
        textView.setText(result);
    }
}
文件读写类代码如下:
package com.rfstar.filesavetest;

import android.content.Context;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class HandFile {

    private Context context;
    public HandFile(Context context){
        this.context=context;
    }
    public  void writeFileData(String filename,String message)
    {
        try{
            FileOutputStream fileOutputStream=context.openFileOutput(filename,
                    context.MODE_PRIVATE);
            byte[] bytes=message.getBytes();
            fileOutputStream.write(bytes);
            fileOutputStream.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public String readFileData(String fileName)
    {
        String result="";
        try{
            FileInputStream fileInputStream=context.openFileInput(fileName);
            int length=fileInputStream.available();
            byte[] buffer=new byte[length];
            fileInputStream.read(buffer);
            result=new String(buffer);
            fileInputStream.close();
        }catch (Exception e)
        {
            e.printStackTrace();
        }
        return  result;
    }

}

实例代码中的新方法和逻辑以及实现的功能在前文都已经叙述了。运行程序,效果如下:

源码下载地址:链接:https://pan.baidu.com/s/1ExoSxaQRdjmwUUnDuSbUIQ?提取码:43ka?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-23 10:54:40  更:2021-07-23 10:56:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/28 2:27:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码