zoukankan      html  css  js  c++  java
  • Android学习——文件内部存储

    一、内部存储和外部存储

    内部存储

    • 可用: 一直可用
    • 访问:应用保存文件在这里,只有应用本身能访问
    • 卸载:卸载应用时,应用的所有文件都会从内部存储中删除

    外部存储

    • 可用:非一直可用,可用挂载外部存储作为USB存储,甚至可用移除外部存储
    • 访问:存储在外部存储的文件,很容易被其他应用访问和修改
    • 卸载:卸载应用时,应用在外部存储创建的文件不一定都会被删除掉,只是在getExternalFilesDir()路径下的文件会被删除(后面会具体说明)

    二、内部存储

     当存储在内部存储时,可用通过下面方法获取合适的File对象。

    Context   getFilesDir(): 返回应用程序的内部files目录的File对象。如:/data/user/0/com.flx.testfilestorage/files

    Context   getCacheDir():返回一个应用程序内部临时文件目录的File对象,这个临时文件在不需要时会被删除,在系统可用存储很低时也会被系统删除。如:/data/user/0/com.flx.testfilestorage/cache

    应用files目录中文件的操作

    创建:这里给出了如下两种方式

    • 构造File对象,包含了目录和文件名。通过createNewFile()进行创建,如果文件不存在则创建。
    File createFiles = new File(context.getFilesDir(), "testfile.txt");
    try {
    createFiles.createNewFile();
    } catch (IOException e) {
    Log.d( TAG, "files err:"+e.getMessage() );
    }
    • 通过Context的api直接操作,通过openFileOutput直接获取FileOutputStream输出流对象,如果文件不存在,则直接创建。

    注:openFileOutput的第二个参数(mode)文件的操作模式,其他值在API 17以后被弃用,只能使用MODE_PRIVATE。在SharedPreferences中有详细说明:https://www.cnblogs.com/fanglongxiang/p/11390013.html

    复制代码
            try {
                //mode参数注意下,这里使用的Context.MODE_PRIVATE
                FileOutputStream outputStream = context.openFileOutput( "testfile22.txt", Context.MODE_PRIVATE );
                outputStream.write( "Use OutputStream Create file
    ".getBytes() );
                outputStream.close();
            } catch (IOException e) {
                Log.d( TAG, "outputStream err:"+e.getMessage() );
            }
    复制代码

    获取文件:

    • 同上,通过目录和文件名 构造File对象
    1
    File createFiles = new File(context.getFilesDir(), "testfile.txt");
    • 上面通过openFileOutput获取文件输出流 可写文件(不存在则创建),也可通过openFileInput获取文件输入流 进行读取文件内容。
    FileOutputStream outputStream = context.openFileOutput( "testfile22.txt", Context.MODE_PRIVATE );//输出流
    FileInputStream fileInputStream = context.openFileInput( "testfile22.txt" );//输入流
    • 还可直接获取files里的所有文件列表
    1
    String[] arrFiles = context.fileList();

      

    读写文件:

    直接构造文件输出输入流读写文件。

    1
    2
    3
    4
    5
    FileOutputStream fileOutputStream = context.openFileOutput( "testfile22.txt", Context.MODE_PRIVATE );
    FileOutputStream fileOutputStream2 = new FileOutputStream( createFiles );
     
    FileInputStream fileInputStream = context.openFileInput( "testfile22.txt" );
    FileInputStream fileInputStream2 = new FileInputStream( createFiles );

      

    删除文件:

    • File对象直接调用delete()方法删除
    1
    createFiles.delete();
    • Context直接通过文件名删除
    1
    context.deleteFile( "testfile22.txt" );

      

    创建临时文件:

    上述files目录操作方式同样适用(File对象需要指定路径的可以,而Context直接通过文件名的则不可以),另外添加一个createTempFile()的方法。

    1
    File.createTempFile( "tempfile"null, context.getCacheDir() );
  • 相关阅读:
    bzoj 2527: [Poi2011]Meteors 整体二分
    bzoj 2738 矩阵乘法
    bzoj 3110 K大数查询
    bzoj 3262 陌上花开
    cogs 577 蝗灾 CDQ分治
    bzoj 1101 zap
    bzoj 2005
    bzoj 3518 Dirichlet卷积
    bzoj 1257
    最优贸易 [NOIP 2009]
  • 原文地址:https://www.cnblogs.com/znjy/p/14907906.html
Copyright © 2011-2022 走看看