文件管理与XMl、JSON解析

1、使用内部存储器

你可以直接保存文件在设备的内部存储。默认情况下,文件保存在你的应用程序的内部存储,其他应用程序或用户不能访问。当用户卸载你的应用城西是,这些文件被删除。

(一)在内部存储创建并写入私有文件:

(1)调用openFileOutputStream(name,model)方法,返回一个FileOutputStream,name参数用于指定文件名称,不能包含路径分隔符“/”,如果文件不存在,会自动创建它。创建的文件保存在/data/data/<package name>/files/目录中,model参数指的是使用模式,分别有:

MODE_PRIVATE:私有(创建此文件的应用能够使用,其他应用不能访问),写入文件会覆盖原来的内容

MODE_APPEND:私有,在原有内容上增加数据

(2)调用write方法把数据写入文件

(3)调用close方法关闭流

    /**
     * 写入私有文件
     * @param view
     */
    public void writePrivateFile(View view) {
        try {
            OutputStream out = openFileOutput("ake.tex", Context.MODE_PRIVATE);
            String info = "我是中国人";
            byte[] bytes = info.getBytes();
            //写入
            out.write(bytes, 0, bytes.length);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

读取私有文件:

    /**
     * 读取私有文件
     *
     * @param view
     */
    public void readPrivateFile(View view) {
        try {
            InputStream inputStream = openFileInput("test.txt");
            byte[] bytes = new byte[1024];
            StringBuffer sb = new StringBuffer();
            int len = -1;
            while ((len = inputStream.read(bytes)) != -1) {
                sb.append(new String(bytes, 0, len));
            }
            inputStream.close();
            Toast.makeText(MainActivity.this, sb, Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

保存内部缓存文件:

如果你想缓存一些数据,而不是永久保存,可以使用getCacheDir()打开文件所在的目录,代表内部应用程序应保存临时缓存文件。

当设备的内部存储空间低,Android可以删除这些缓存文件以回收空间。然而,你不应该依赖系统清除这些文件,应该自己维护缓存文件,并保持在一个合理的小号空间的限制,如1M,当用户卸载应用时,这些文件被删除。

通过getCacheDir()获取的目录为:/data/data/<package name>/cache

    /**
     * 写入一个缓存文件
     * @param view
     */
    public void writePrivateCacheData(View view) {
//        String file = getCacheDir() + "/temp.tap";
        try {
            //创建一个缓存的文件路径
            File temp = File.createTempFile("temp.tmp", null, getCacheDir());
            FileOutputStream out = new FileOutputStream(temp);
            PrintStream ps = new PrintStream(out);
            ps.print("测试测试测试");
            ps.close();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 

 

其他有用的方法:

getFileDir()  获取私有文件目录:/data/data/<package name>/files

getDiary() 创建(或打开已存在的) 目录:/data/data/<package name>/app_<文件名>

deleteFile(name)  删除私有目录的文件  :/data/data/<package name>/files

fileList()  获取/data/data/<package name>/files目录的文件名数组

2、使用外部存储器(SD卡)

所有兼容Android的设备都支持一个可共享的“外部存储”(external storage),可用来保存文件。这可以使一个可移动的存储设备(比如SD卡)或者一个内部的(不可移动的)存储。保存在外部存储的文件是可读的。并且当用于传输数据的USB大容量存储选项启动时,用户能够在计算机上修改它们

(一)获取外部存储权限

为了在外部存储或写文件,必须要获得android.permission.READ_EXTERNAL_STORAGE或android.permission.WRITE_EXTERNAL_STORAGE系统权限。

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

 

既要读也要写权限,柯旭添加WRITE_EXTERNAL_STORAGE即可

(二)检查媒体的可用性

在使用外部存储来保存数据时,我们应该使用getExternalStorageState()来检查当前设备是否存在外部存储设备(SDCard),否则将会发生意外。

    public void isSDCard(View view) {
        //判断是否有SD卡
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            Toast.makeText(MainActivity.this, "有SD卡", Toast.LENGTH_SHORT).show();
            //是否只读
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {
                Toast.makeText(MainActivity.this, "SD卡是只读的", Toast.LENGTH_SHORT).show();
            }

            //获取SD卡的路径
            //Environment.getExternalStorageDirectory().getPath();
        } else {
            Toast.makeText(MainActivity.this, "没有SD卡", Toast.LENGTH_SHORT).show();
        }

    }

 

(三)外部存储保存私有缓存文件

通过Context.getExternalFileDir()方法可以获取到SDCard/Android/data/你的应用包名/files/目录,一般放一些长时间保存的数据。

通过Context.getExternalCacheDir()方法可以获取到SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据

如果使用上面的方法,当你的应用在被用户卸载后,SDCard/Android/data/你的应用包名/这个迷路下的所有文件都会被删除,不会留下垃圾信息。

而且上面两个目录分别对应 设置-应用-应用详情里面的“清除数据”与“清除缓存”选项。

 

转载于:https://www.cnblogs.com/chhom/p/4732818.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值