欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-11-28 23:49:34
安卓的三种本地的典型数据存储方式 sharedpreferences 以文件格式保存在本地存储中 sql数据库 这篇文章就是讲解一下如何使用 share...

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

sharedpreferences

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

sql数据库

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

ide : android studio

参考文章:

絮叨一下:本来文件操作这一块上周就想把其弄懂,然后继续进一步的学习。但是因为官方的 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" ;