Android——文件存储之内部存储(含源码下载)

内部存储位于 Android 手 机 系 统 下 的“/data/data/< 包 名 >/files” 目 录 中。 使 用 Java 提供的 IO 流体系可以很方便的对内部存储的数据进行读写操作。其中,FileOutputStream 类的openFileOutput() 方法用来打开相应的输出流而 FileInputStream 类的 openFileInput() 方法用来打开相应的输入流。默认情况下,使用 IO 流保存的文件仅对当前应用程序可见,对于其他应用程序(包括用户)是不可见的(即不能访问其中的数据)。如果用户卸载了应用程序,则保存数据的文件也会一起被删除

内部存储一般有如下几个常用方法:
1、创建文件并写入数据

/*
* 参数 name:用于指定文件名称,该参数不能包含描述路径的斜杠“/”。
* 参数 mode:用于指定访问权限,可以使用如下取值:
* MODE_PRIVATE:表示文件只能被创建它的程序访问。
* MODE_APPEND:表示追加模式,如果文件存在,则在文件的结尾处添加新数据,否则
  创建文件。
* MODE_WORLD_READABLE:表示可以被其他应用程序读,但不能写。
* MODE_WORLD_WRITEABLE:表示可以被其他应用程序读和写。
*/
FileOutputStream fos = openFileOutput(String name, int mode)); //获取文件输出流
fos.write(byte b[]); //写入数据
fos.flush(); //清空缓存
fos.close(); //关闭文件输出流

2.读取存储数据

/*
* name是要读取的文件名
*/
FileInputStream fis = openFileInput(String name); //获取文件输入流
byte[ ] buffer = new byte[fis.available()]; //定义保存数据的数组
fis.read(buffer); //从输入流中读取数据
String content = new String(buffer);//将读取的数据转换成字符串

3.得到存储文件的根目录方法getFilesDir()

public String getFileDir(String filename){
        File file = new File(context.getFilesDir(), filename);
        return file.getPath();
 }

4.得到内部存储的所有文件名方法fileList()

public String[] getAllFile(){
    return context.fileList();
 }

5.删除指定文件方法deleteFile(……)

public void deleteFile(String filename){
  context.deleteFile(filename);
}

6.得到缓存目录方法getCacheDir()

public String getCacheDir(String filename){
   return context.getCacheDir().getPath();
}

这里为了方便使用,我创建了一个InternalFileOperation类,用于操作常用内部存储的方法。
代码如下:

import android.content.Context;

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

import static android.content.Context.MODE_PRIVATE;

public class InternalFileOperation{

    private Context context;
    private static InternalFileOperation interfile = null;


    //得到InternalFileOperation实例
    public static InternalFileOperation get(Context context){
        if (interfile == null){
            interfile = new InternalFileOperation(context);
        }

        return interfile;
    }

    //初始化InternalFileOperation类
    private InternalFileOperation(Context context) {
        this.context = context;
    }

    //创建文件并保存数据,filename为文件名,content为保存内容
    public void savedFile(String filename,String content) {
        FileOutputStream fos = null;

        try {

            fos = context.openFileOutput(filename,MODE_PRIVATE);
            fos.write(content.getBytes());
            fos.flush();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fos.close();

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

    //显示存储的数据,filename为文件名
    public String showFile(String filename) {
        FileInputStream fis = null;
        byte[] buffer = null;
        String content = null;

        try {

            fis = context.openFileInput(filename);
            buffer = new byte[fis.available()];
            fis.read(buffer);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fis.close();
                content = new String(buffer);
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        return content;
    }

    //得到根目录,filename为文件名
    public String getFileDir(String filename){
        File file = new File(context.getFilesDir(), filename);

        return file.getPath();
    }

    //以字符串数组型得到所有内部存储的文件名
    public String[] getAllFile(){
        return context.fileList();
    }

    //删除指定文件,filename为文件名
    public void deleteFile(String filename){
        context.deleteFile(filename);
    }

    //得到缓存目录
    public String getCacheDir(String filename){
        return context.getCacheDir().getPath();
    }
}

链接:百度网盘下载 提取码:wyoe

发布了33 篇原创文章 · 获赞 11 · 访问量 9258

猜你喜欢

转载自blog.csdn.net/qq_43567345/article/details/104428526