zoukankan      html  css  js  c++  java
  • Android Saving Files 简介 + 实例源码

    首先我们要知道Android  内部存储 (Internel Storage)和 外部存储(External Storage) 的存储的分类。

    Internel Storage :  通常就是手机自带的内存(Flash),这个存储空间,总是可用的,文件默认保存到

    这里,卸载应用程序时,与程序相关的文件将一并被自动删除。


    Externel Storage :  通常就是 SD 内存卡,可知他并不是总是可用的,它可能被卸载(unmount)。它总

    是可读的(world-readable),应用程序被卸载时,系统自动删除通过  getExternalFilesDir()

    得到的目录下的文件。

     

    Internel 有读写限制,而Externel没有,但是在将来会被实现限制功能。

     

    1.当使用 SD 卡时,要 加上 写(write) Permissions 

    <manifest ...>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        ...
    </manifest>
    对于 读(Read) 权限,现在,所有的应用 有能力读而不需 Permissions

    但是这个 Read 权限功能,将会在未来某个发布版本中添加,为了你的应用的可持续,所以有必要添加

    Read 权限

    <manifest ...>
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        ...
    </manifest>
    2.Internel Storage 文件操作 

    应用的存储路径被你应用的包名(package name)指定,

    在Android 文件系统的特殊位置:

    创建的文件存放在/data/data/<package name>/files目录下。

    我们用 Context.getCacheDir() 或 Context.getFilesDir() 来获取。

    其中 Context.getCacheDir()是得到的 cache 目录。

    ①创建文件 

    File file = new File(context.getFilesDir(), filename);
    ②写文件 用 FileOutputStream 流对象操作 

    String filename = "myfile";
    String string = "Hello world!";
    FileOutputStream outputStream;
    
    try {
      outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
      outputStream.write(string.getBytes());
      outputStream.close();
    } catch (Exception e) {
      e.printStackTrace();
    }

    PS: filename 不能包含路径,只是单纯的文件名。   

     FileOutputStream openFileOutput (String name, int mode)

    可能抛出(throw) FileNotFoundExecption。

    name                        The name of the file to open; can not contain path separators.
    mode Operating mode. Use 0 or MODE_PRIVATE for the default operation, MODE_APPEND to append to an existing file, MODE_WORLD_READABLE and MODE_WORLD_WRITEABLE to control permissions.

    ③保存文件 Save a File

    ④删除文件 调用 ContextdeleteFile(): 方法。

    myContext.deleteFile(fileName);

    3.External Storage 文件操作

    ① 对于 SD 内存卡,我们操作之前要先检验一下是否挂载。

    用 String Environment.getExternalStorageState() 得到状态。

    /* Checks if external storage is available for read and write */
    public boolean isExternalStorageWritable() {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
            return true;
        }
        return false;
    }
    
    /* Checks if external storage is available to at least read */
    public boolean isExternalStorageReadable() {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state) ||
            Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
            return true;
        }
        return false;
    }

    ②External 文件分为 Public files 和 Private files 两种。

    对于 External 目录的获取,

    Public files 用

    public static File getExternalStoragePublicDirectory (String type)

    Ad
    Private files 用

    getExternalFilesDir() 或者 Context.getExternalFilesDir()

        File file = new File(context.getExternalFilesDir(
                Environment.DIRECTORY_PICTURES), albumName);
        File file = new File(Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_PICTURES), albumName);
    当然目录可能不存在

        if (!file.mkdirs()) {
            Log.e(LOG_TAG, "Directory not created");

    ④调用文件对象的 delete() 方法。

    myFile.delete();

    最后

    当你卸载应用程序时,系统将自动删除以下文件::

    • 此程序存储在 Internal Storage 里的所有文件
    • 此程序使用 getExternalFilesDir()保存在. external storage 里的文件。
    • 但是, 但是你需要手动删除 用getCacheDir() 创建的 cached files 和不再需要的其他文件。.


    实例:Files_RW_SourceCode.zip




  • 相关阅读:
    混淆
    【虚拟DOM】√
    fn
    notebook
    sourceMappingURL
    十进制转换为十六进制
    关于this和super的区别
    类中访问级别
    Java中字符串解析
    IWorkspace操作
  • 原文地址:https://www.cnblogs.com/wangmingshuo/p/3323406.html
Copyright © 2011-2022 走看看