关闭

Android学习笔记(文件篇)

标签: android
159人阅读 评论(0) 收藏 举报
分类:

好记性不如烂笔头,仅以记之。


1:文件的删除delete方法

解:file如果是一个文件,调用delete方法可以成功删除,但是文件目录可能删除失败,这个是因为文件目录必须是空文件夹才能删除。如果文件目录不为空,可以使用递归的方式依次删除。

    public static void delete(File file) {  
        if (file.isFile()) {  
            file.delete();  
            return;  
        }  

        if(file.isDirectory()){  
            File[] childFiles = file.listFiles();  
            if (childFiles == null || childFiles.length == 0) {  
                file.delete();  
                return;  
            }  

            for (int i = 0; i < childFiles.length; i++) {  
                delete(childFiles[i]);  
            }  
            file.delete();  
        }  
     }

2.文件的读写安全

解:文件读可以并发,但是写必须独占,多线程的操作容易造成文件写入混乱,这时候需要给写动作加同步或者给文件加锁。第一种使用同步是最简单的方式,synchronized关键词即可,但是这也造成了文件使用的局限性,工程中需要使用某个文件时必须使用该方法,而且其他应用程序任然可以对该文件进行修改,不安全。第二种是使用文件锁,FileLock,这个可以保证该文件的访问限制。具体使用请戳–>JAVA文件锁


3.Android各个文件目录路径

public void test() {
        try {
            // assets:由于该目录随APK打包,安装之后是压缩包的形式,所以直接获取路径是找不到该文件的,只能以流的形式获取。
            InputStream assetsTestInputStream = context.getAssets().open("test.txt");
            // data/data/包名/cache
            File cacheFile = context.getCacheDir();
            // data/data/包名/files
            File filesFile = context.getFilesDir();
            // sdcard,内置
            String innerSDCardPath = getInnerSDCardPath();
            // sdcard,外置
            List<String> outSDCardPaths = getExtSDCardPath();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /**
     * 获取内置SD卡路径
     * @return
     */
    public String getInnerSDCardPath() {  
        return Environment.getExternalStorageDirectory().getPath();  
    }

    /**
     * 获取外置SD卡路径
     * @return  应该就一条记录或空
     */
    public List<String> getExtSDCardPath()
    {
        List<String> lResult = new ArrayList<String>();
        try {
            Runtime rt = Runtime.getRuntime();
            Process proc = rt.exec("mount");
            InputStream is = proc.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String line;
            while ((line = br.readLine()) != null) {
                if (line.contains("extSdCard"))
                {
                    String [] arr = line.split(" ");
                    String path = arr[1];
                    File file = new File(path);
                    if (file.isDirectory())
                    {
                        lResult.add(path);
                    }
                }
            }
            isr.close();
        } catch (Exception e) {
        }
        return lResult;
    }

4.java io

请戳–>Java IO最详解

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:26930次
    • 积分:729
    • 等级:
    • 排名:千里之外
    • 原创:45篇
    • 转载:0篇
    • 译文:0篇
    • 评论:9条
    文章分类
    最新评论