Android 数据存储之 FileInputStream 工具类及FileInputStream类的使用_Android

安卓的三种本地的典型数据存储方式

SharedPreferences

以文件格式保存在本地存储中

SQL数据库

这篇文章就是讲解一下如何使用 SharedPreferences 保存文件。主要解释什么都写在注释里面的。

IDE : Android Studio

参考文章:http://www.jb51.net/article/74215.htm

絮叨一下:本来文件操作这一块上周就想把其弄懂,然后继续进一步的学习。但是因为官方的 Android Training 之中的概念太过于繁杂。导致我认为存储到内部之中要查询空间,得到返回之类。结果是因为我把保存在内部空间(data目录下的包名下的file文件夹)与外部空间(存储空间)的概念混淆。所以耽误了大量时间并且不得法。最后还是看到参考文章才知道应该怎么去写。然后自己跟着参考文章过了一遍。

同样的,我采用了分离写法,也就是创建一个工具类,模块化方便使用。希望能帮助到别人,也是给自己建立一种概念。

话不多说,上代码:

import android.content.Context;
import android.util.Log;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/**
* Created by zhizhao on 2015/11/1 0001 in 16:00.
*/
public class UsingFileInputStream {
private Context fileContext;
private String fileName;
private String fileUserName;
private String filePassword;
public UsingFileInputStream(String name, Context context, String userName, String password) {
this.fileName = name;
this.fileContext = context;
this.fileUserName = userName;
this.filePassword = password;
}
//保存的时候是在文件内容中连续写入,也就是在之前保存的数据基础上再次写入。
public void writeFileInputStream() {
try {
FileOutputStream fileOutputStream = fileContext.openFileOutput(fileName,
fileContext.MODE_PRIVATE);
byte[] byteUserName = fileUserName.getBytes();
byte[] bytePassword = filePassword.getBytes();
fileOutputStream.write(byteUserName);
fileOutputStream.write(bytePassword);
Log.v("FileInputStream保存结果 ", "UserName = " + fileUserName + " Password = " + filePassword);
fileOutputStream.flush();
fileOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//读取文件是把整个文件的内容进行读取。如果要加入解析,则保存的时候保存为特殊格式。
public void readFileInputStream() {
try {
FileInputStream fileInputStream = fileContext.openFileInput(fileName);
int len = fileInputStream.available();
byte[] buffer = new byte[len];
fileInputStream.read(buffer);
Log.v("读取到的文件为:", ""+new String(buffer));
fileInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

下面是使用:

private void writeFile(){
UsingFileInputStream fileInputStream = new UsingFileInputStream("account",
MySaveDataActivity.this, userName, userPass);
fileInputStream.writeFileInputStream();
tvReadInformation.setText("保存成功!" + "\n UserName = " + userName + "\n UserPass = " + userPass);
}
private void readFile(){
UsingFileInputStream fileInputStream = new UsingFileInputStream("account",
MySaveDataActivity.this, userName, userPass);
fileInputStream.readFileInputStream();
tvReadInformation.setText("读取成功!"+"\n UserName = "+userName+"\n UserPass = "+userPass);
}

总结一下:

我觉得自己目前写的也不是很对,很完美。因为在调用过程中要反复去填写文件名,传入值。并且在返回值之中很难知道成功失败。

况且我并没有把文件异常捕获并进行操作,因为如果是没有文件的情况下去操作的话,必然会报错:空指针异常。

不过既然是练习也就没考虑那么多,因为这种时候只要在 try{}catch(){} 代码块里面加入自己的操作手段就可以了。

下面还有点时间接着给大家介绍Android FileInputStream类的使用

1.FileInputStream类概述

    继承关系:

       java.io.FileInputStream->java.io.InputStream->java.lang.Object

实现接口:

       Closeable    

 类的功能:

    FileInputStream 从文件系统中的某个文件中获取输入字节。哪些文件可用取决于主机环境。

       FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。

2.类的属性和行为

   (1) public void close() throws IOException

    功能:  关闭此文件输入流并释放与此流有关的所有系统资源。

            如果此流有一个与之关联的通道,则关闭该通道。

    指定者:接口 Closeable 中的 close

    覆盖:  类 InputStream 中的 close

    抛出:  IOException - 如果发生 I/O 错误。

   (2) public int read() throws IOException

    功能:  从此输入流中读取一个数据字节。如果没有输入可用,则此方法将阻塞。

    指定者:类 InputStream 中的 read

    返回:  下一个数据字节;如果已到达文件末尾,则返回 -1。

    抛出:  IOException - 如果发生 I/O 错误。

   (3) public int read(byte[] b) throws IOException

    功能:从此输入流中将最多b.length个字节的数据读入一个字节数组中。在某些输入可用前,此方法将阻塞

    覆盖:类 InputStream 中的 read

    参数:b - 存储读取数据的缓冲区

    返回:读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。

    抛出:IOException - 如果发生 I/O 错误。

   (4) public int read(byte[] b, int off, int len) throws IOException

    功能:从此输入流中将最多len个字节的数据读入一个字节数组中。在某些输入可用之前,此方法将阻塞。

    覆盖:类 InputStream 中的 read

    参数:b - 存储读取数据的缓冲区。

          off - 数据的起始偏移量。

          len - 读取的最大字节数。

    返回:读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。

    抛出:IOException - 如果发生 I/O 错误。

3.常见错误

   在eclipse下使用FileInputStream,提示找不到指定文件

   代码:

 filename = "abc.txt" ;
  FileInputStream fis = new FileInputStream(filename);

   错误显示:

 java.io.FileNotFoundException: dbconfig.properties (系统找不到指定的文件。)
  at java.io.FileInputStream.open(Native Method)
  at java.io.FileInputStream.<init>(FileInputStream.java:106)
  at java.io.FileInputStream.<init>(FileInputStream.java:66)

   解决方法:

       因为eclipse下运行main程序时,eclipse会自动将发布目录作为其根目录,所以会提示找不到文件,将filename改为绝对目录即可

      filename = "\sdcard\...\abc.txt" ;

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索 android工具类
android file工具类、android file存储、android file文件存储、java file工具类、fileutil工具类下载,以便于您获取更多的相关知识。

时间: 2024-10-10 22:13:06

Android 数据存储之 FileInputStream 工具类及FileInputStream类的使用_Android的相关文章

《Android和PHP开发最佳实践》一2.6 Android数据存储

2.6 Android数据存储 前面刚介绍过上下文对象的使用,其最重要的功能之一,就是用于存储应用运行期间产生的中间数据.接下来,我们来讨论Android应用中持久化类型数据的存储方案.对于移动互联网应用来说,我们经常把核心数据存储在服务端,也就是我们常说的"云端",但是在实际项目中也会经常使用到Android系统内部的数据存储方案,接下来让我们认识一下几种最常用的数据存储方案. 2.6.1 应用配置(Shared Preferences) 在Android系统中,系统配置(Share

5种Android数据存储方式汇总_Android

本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面将为大家一一详细介绍. 第一种:使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比

android数据存储之文件存储方法_Android

文件存储是 Android 中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动的保存到文件当中的. 概述 文件存取的核心就是输入流和输出流. Android文件的操作模式 文件的相关操作方法 文件读写的实现 openFileOutput和openFileInput方法 /** * openFIleOutput ,openFileInput * 这两种方法同sp一样只能讲文件保存到手机内存固定的路径中, * 默认为 /data/data/<packageName

Android 数据存储方式有哪几种_Android

以下内容给大家介绍Android数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 本文主要介绍如何使用文件来存储数据.Android文件操作用到的是Java.IO中的FileOutputStream和FileInputStream类. 一.存储文件 首先实例化一个FileOutputStream. FileOutputStream foStream = openFileOutput(fileN

Android 数据存储方式有哪几种

以下内容给大家介绍Android数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 本文主要介绍如何使用文件来存储数据.Android文件操作用到的是Java.IO中的FileOutputStream和FileInputStream类. 一.存储文件 首先实例化一个FileOutputStream. FileOutputStream foStream = openFileOutput(fileN

android数据存储方式(三) Files

平时的我们如果想要保信息,一般的做法就是记在本子上,然后在使用的时候从本子中拿出来.android 保存数据的方式也可以像是这样先将数据保存在文件中,然后再从文件中读取.采取这种方式,我们可以在程 序间共享信息,但默认下,android的文件是私有的,要想共享,需要权限. 例子就用上一篇文章中的 CheckBox,用文件的方式保存点击状态(例子的详情请 看:http://www.cnblogs.com/wenjiang/archive/2013/06/02/3114017.html) 直接就是代

四种Android数据存储方式_Android

Android提供以下四种存储方式: SharePreference SQLite File ContentProvider Android系统中数据基本都是私有的,一般存放在"data/data/程序包名"目录下.如果要实现数据共享,正确的方式是使用ContentProvider.  SharedPreferenceSharedPreference是一种轻型的数据存储方式,实际上是基于XML文件存储的"key-value"键值对数据.通常用来存储程序的一些配置信息

Android数据存储(一)----SharedPreferences详解

一.Android数据的存储方式: Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File:此外还有一种网络存储.由于Android系统中,数据基本都是私有的,都是存放于"data/data/程序包名"目录下,所以要实现数据共享,正确方式是使用Content Provider. 在Android中,可以使用几种方式实现数据持久化: Shared Preferences:除SQLite数据库外,另一种

Android数据存储之SQLite使用_Android

SQLite是一款开源的.嵌入式关系型数据库,第一个版本Alpha发布于2000年.SQLite在便携性.易用性.紧凑性.高效性和可靠性方面有着突出的表现. 在Android中创建的SQLite数据库存储在:/data/data/<包名>/databases/目录下. 主要特点: -轻量级 -独立性,没有不依赖,无需安装 -跨平台,支持众多操作系统 -支持高达2TB大小的数据库 -每个数据库以单个文件的形式存在 -以B-Tree的数据结构形式存储在硬盘 SQLite的数据类型: SQLite支