android I/0流操作文件(文件存储)

目录
  • 文件存储
    • I/0流操作文件
  • 总结

文件存储

文件存储方式不受类型限制,可以将一些数据直接以文件的形式保存在设备中,例如文本文件、PDF ,音频,图片等。存储类型复杂的数据时,通常采用文件存储。Java提供一套完整的I/О流体系,通过I/О流可以非常方便地访问磁盘中的文件,同样Android 也支持I/O流方式来访问手机等移动设备中的存储文件。

I/0流操作文件

进行I/О流操作文件时,需要先获得文件的输人流和输出流。在Android应用程序中,可以通过上下文环境Context对象提供的openFileInput()和 openFileOuput()两个方法分别来获得文件的输入流和输出流,这两个方法的具体介绍如下。

  • FilelnputStream openFileInput(String name): 用于获取应用程序的数据文件夹下指定name文件名的标准文件输入流,以便读取设备中的文件。
  • FileOutputStream openFileOuput(String name, int mode): 用于获取应用程序的数据文件夹下指定name文件名的标准文件输出流,以便将数据写入设备的文件中。

其中 openFileOutput()方法的第二个参数mode用于指定输出流的模式,即打开文件进行操作的模式。Context类中提供了4个静态常量用于表示不同的输出模式,如下表所示。

4种文件读写模式

模式 功能描述
Context.MODE_PRIVATE 私有模式,该模式所创建的文件都是私有文件,只能被应用本身所访问。因此,该模式下所写入的内容会覆盖原来文件的内容
Context. MODE_APPEND 附加模式,该模式首先会检查文件是否存在,若文件不存在,则创建新文件;若文件存在,则在原文件的末尾追加内容
Context.MODE_WORLD_READABLE 可读模式,该模式的文件可以被其他应用程序读取
Context.MODE_WORLD_WRITABLE 可写模式,该模式的文件可以被其他应用程序读写

除此之外,Context上下文对象还提供了一些方法来访问应用程序的数据文件夹,如下表所示。

访问数据文件夹的方法

方法 功能描述
File getDir(String name, int mode) 在应用程序的数据文件夹下获取或创建name对应的子目录
File getFilesDir() 获取应用程序的数据文件夹的绝对路径
String[] fileList() 返回应用程序的数据文件夹下的所有文件
boolean deleteFile( String name) 删除应用程序的数据文件夹下的指定文件

下面通过代码演示如何使用I/O流对文件进行读写操作

创建xml布局文件

xml布局代码如下

<?xml version="1.0" encoding="utf-8"?>
<!-- 线性布局,宽度高度适应屏幕变化,水平方向垂直 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <!-- 编辑输入框,宽度适应线性布局变化,高度适应自己,设置显示行数为四行 -->
    <EditText
        android:id="@+id/ediFileOut"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:lines="4"/>
    <!-- 保存文件按钮,宽度,高度适应自己,按钮文本显示-->
    <Button
        android:id="@+id/btnWrite"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="保存文件"/>
    <!-- 编辑显示框,宽度适应线性布局变化,高度适应自己,设置光标不可见,不可编辑,行数为4-->
    <EditText
        android:id="@+id/editFileIn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:cursorVisible="false"
        android:editable="false"
        android:lines="4"/>
    <!-- 读取文件按钮宽度,高度适应自己,按钮文本显示-->
    <Button
        android:id="@+id/btnRead"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="读取文件"/>
</LinearLayout>

上述界面布局比较简单,只包含两个文本框和两个按钮,分别用于保存文件和读取文件两种操作。

接着创建Activity程序

activity代码如下

package com.example.wenjiancuncu;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintStream;
public class FileIOActivity extends AppCompatActivity {
    private EditText editFileIn, editFileOut; //声明两个文本框
    private Button btnRead, btnWrite; //声明两个按钮
    final String FILE_NAME = "qstIO.txt"; //指定文件名
    @Override //重写父类方法
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); //调用父类方法
        setContentView(R.layout.activity_file_io); //设置布局
        //获取两个文本框
        editFileIn = (EditText) findViewById(R.id.editFileIn);
        editFileOut = (EditText) findViewById(R.id.ediFileOut);
        //获取两个按钮
        Button btnRead = (Button) findViewById(R.id.btnRead);
        Button btnWrite = (Button) findViewById(R.id.btnWrite);
        //以匿名类的形式设置btnRead按钮的事件监听器
        btnRead.setOnClickListener(new View.OnClickListener() {
            @Override //重写接口方法
            public void onClick(View v) {
                //读取指定文件中的内容,并在editFileIn文本框中显示出来
                editFileIn.setText(read());
            }
        });
        //以匿名类的形式设置btnWrite按钮的事件监听器
        btnWrite.setOnClickListener(new View.OnClickListener() {
            @Override //重写接口方法
            public void onClick(View v) {
                write(editFileOut.getText().toString()); //将editFileOut中的内容写入文件中
                editFileOut.setText(""); //清空editFileOut文本框中的内容
            }
        });
    }
    private String read() {
        try {
            FileInputStream fis = openFileInput(FILE_NAME); //打开文件输入流
            byte[] buff = new byte[1024]; //定义一个字节缓存数组
            int hasRead = 0;
            StringBuilder sb = new StringBuilder(""); //创建可变字符串
            //读取文件内容
            while ((hasRead = fis.read(buff)) > 0) {
                //把字节数组转化为字符串并添加到可变字符串中
                sb.append(new String(buff, 0, hasRead));
            }
            fis.close(); //关闭文件输入流
            return sb.toString(); //返回一个字符串
        }catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    private void write(String content) {
        try {
            //以追加模式打开文件输出流
            FileOutputStream fos = openFileOutput(FILE_NAME, Context.MODE_APPEND);
            PrintStream ps = new PrintStream(fos); //将FileOutStream包装成PrintStream
            ps.println(content); //输出文件内容
            ps.close(); //关闭文件输出流
            //使用Toast显示保存成功
            Toast.makeText(FileIOActivity.this,"保存成功", Toast.LENGTH_LONG).show();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上述代码的核心操作就是文件的保存和读取,其中read()和 write()两个方法分别用于读文件和写文件操作;代码中分别对btnRead 和 btnWrite按钮设置了事件监听器,并在事件处理方法中调用相应的read()或write()方法实现文件的读取或保存。

在AndroidMainfest中声明Activity

运行结果

Android应用程序的数据文件默认保存在/data/data/包名/files目录下。在 AndroidDevice Monitor的 File Explorer选项卡中,展开/data/data/com. 包名/files目录,在该目录下可以看到保存的qstIO.txt 数据文件,如下图所示。

总结

这篇关于微信demo的文章就到这里了,希望大家可以多多关注我们的更多精彩内容!

(0)

相关推荐

  • Centos7配置fastdfs和nginx分布式文件存储系统实现过程解析

    1.安装libfastcommon-1.0.43,安装包可以在大佬的https://github.com/happyfish100/libfastcommon/releases下载 [root@localhost Downloads]# tar -zxvf libfastcommon-1.0.43.tar.gz # 解压后进入目录进行编译并安装 [root@localhost libfastcommon-1.0.43]#cd libfastcommon-1.0.43 [root@localhos

  • Django文件存储 自己定制存储系统解析

    要自己写一个存储系统,可以依照以下步骤: 1.写一个继承自django.core.files.storage.Storage的子类. from django.core.files.storage import Storage class MyStorage(Storage): ... 2.Django必须可以在无任何参数的情况下实例化MyStorage,所以任何环境设置必须来自django.conf.settings. from django.conf import settings from

  • Android开发实现文件存储功能

    本文实例为大家分享了Android开发实现文件存储的具体代码,供大家参考,具体内容如下 这个程序只有一个Activity, Activity中只有一个Edittext.实现的功能是在Activity销毁之前将EditText的内容存储到一个文件中,在Activity创建的时候,从该文件中读取内容并写道EditText中.代码如下,在onCreate加载数据,在onDestroy中保存数据. MainActivity.kt package com.example.filetest import a

  • 详解Android 中的文件存储

    目录 概要 当我们查看手机的文件管理器的时候,会发现里面的文件五花八门,想要找到自己项目所对应的文件非常困难,甚至有可能压根就找不到自己的文件,本文就来介绍一下APP开发过程当中文件存储的注意事项. 通常我们会将存放的文件分为两种:独立文件和专属文件.顾名思义,独立文件就是独立于APP之外的文件,不会随着APP的删除而删除,而专属文件则是专属于某个APP的文件,当APP删除后,会自动清空相对应的专属文件. 独立文件 独立文件指的是存放在shared/external storage direct

  • Django文件存储 默认存储系统解析

    Django默认使用的文件存储系统'django.core.files.storage.FileSystemStorage'是一个本地存储系统,由settings中的DEFAULT_FILE_STORAGE值确定. class FileSystemStorage(location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None) FileSystemStorage类继承自Storag

  • android I/0流操作文件(文件存储)

    目录 文件存储 I/0流操作文件 总结 文件存储 文件存储方式不受类型限制,可以将一些数据直接以文件的形式保存在设备中,例如文本文件.PDF ,音频,图片等.存储类型复杂的数据时,通常采用文件存储.Java提供一套完整的I/О流体系,通过I/О流可以非常方便地访问磁盘中的文件,同样Android 也支持I/O流方式来访问手机等移动设备中的存储文件. I/0流操作文件 进行I/О流操作文件时,需要先获得文件的输人流和输出流.在Android应用程序中,可以通过上下文环境Context对象提供的op

  • java 流操作对文件的分割和合并的实例详解

    java 流操作对文件的分割和合并的实例详解 学习文件的输入输出流,自己做一个小的示例,对文件进行分割和合并. 下面是代码: package com.dufy.file; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.SequenceInputStream; import java.ut

  • Android 8.0 读取内部和外部存储以及外置SDcard的方法

    最近碰到询问我这个读取SDcard的问题, 很久没有看这部分了,所以大致看了一下, 顺便记录一下.在Android 8.0上做了测试. 一般的Android App能读取的存储空间主要有三种: app自己的私有目录,也就是/data/data/<app 目录>. 读写这个目录不需要单独的权限.每个app只能读写自己的目录,而不能读写其他app的目录. Android通过Seandroid对权限进行了管理. /sdcard. 这个其实是Android手机的internal storage. 也就

  • Java流操作之数据流实例代码

    实例1: package dataInputStreamAndPrintStreamDemo; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.PrintStream; //示范如何自键

  • Android编程中File文件常见存储与读取操作demo示例

    本文实例讲述了Android编程中File文件常见存储与读取操作.分享给大家供大家参考,具体如下: MainActivity文件代码如下: package example.com.myapplication; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; im

  • 详解Android数据存储之Android 6.0运行时权限下文件存储的思考

    前言: 在我们做App开发的过程中基本上都会用到文件存储,所以文件存储对于我们来说是相当熟悉了,不过自从Android 6.0发布之后,基于运行时权限机制访问外置sdcard是需要动态申请权限,所以以往直接sdcard根目录上直接新建了一个xxx/cache/目录来做文件存储就会不是那么容易控制了,所以有必要重新认识一下Android文件存储的相关知识了. 背景: 有关外置sdcard的读写权限 <uses-permission android:name="android.permissi

  • Android 文件数据存储实例详解

    Android之文件数据存储 一.文件保存数据介绍 Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的.文件可用来存放大量数据,如文本.图书.音频等. File对象适合按照从开始到结束的顺序不跳过地读取或写入大量数据.例如,它适合于图片文件或通过网络交换的任何内容. 数据存储的默认位置:/data/data/<包名>/files/***.***. 所有的Android设备都有两个文件存储区域:"

  • C++中输入输出流及文件流操作总结

    本文实例为大家分享了C++中输入输出流及文件流操作笔记,供大家参考,具体内容如下 1.流的控制 iomanip          在使用格式化I/O时应包含此头文件.     stdiostream   用于混合使用C和C + +的I/O机制时,例如想将C程序转变为C++程序 2.类继承关系 ios是抽象基类,由它派生出istream类和ostream类, iostream类支持输入输出操作,iostream类是从istream类和ostream类通过多重继承而派生的类 类ifstream继承了

  • .NET中的IO操作之文件流用法分析

    本文实例讲述了.NET中的IO操作之文件流用法.分享给大家供大家参考.具体分析如下: 读操作 复制代码 代码如下: //1.创建文件流 FileStream fsRead =new FileStream("1.txt",FileMode.Open); //2.创建缓冲区,正常情况下,是不会直接等于文件大小的.这里只有读,所以就这么干了. byte[] bytes =new byte[fsRead.Length]; //3.开始读取, 返回值是读取到的长度. int r =fsRead.

  • Android操作Excel文件的功能实现

    Android中操作Excel文件导出报表时主要采用开源库jxl,最早用在java上,但也可用于Android.与之类似的POI,因为依赖库众多,所以只能用于java,而不能用于Android. 使用jxl需要在Android工程中导入jxl.jar包,jxl可以完成Excel的基本读写操作,其支持与不支持的情况如下: 1.jxl只支持Excel2003格式,不支持Excel2007格式.即支持xls文件,不支持xlsx文件. 2.jxl不支持直接修改excel文件,但可通过复制新文件覆盖原文件

随机推荐