zoukankan      html  css  js  c++  java
  • 文件管理与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/你的应用包名/这个迷路下的所有文件都会被删除,不会留下垃圾信息。

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

  • 相关阅读:
    Spring代理模式
    Spring注解的步骤
    Spring与Struts2集成开发
    Spring框架之控制反转和依赖注入
    使用Spring框架的步骤
    Hibernate锁机制
    Hibernate的缓存机制
    Hibernate框架之HQL查询与Criteria 查询的区别
    Hibernate框架之Criteria 详解
    Ajax异步刷新省市级联
  • 原文地址:https://www.cnblogs.com/chhom/p/4732818.html
Copyright © 2011-2022 走看看