美文网首页
复制文件夹的工具类

复制文件夹的工具类

作者: yangzteL | 来源:发表于2017-07-29 10:52 被阅读5次

    这几天公司项目想拿数据库的数据,但是安卓设备没有root权限,所以自己想了个办法:直接把所有data/data/app下的所有文件全部复制下来了,然后就想看啥数据看啥数据,文件结构如下:


    image.png

    具体的操作如下:

    1. 一个复制文件夹的工具类

    public static void copyPath(final File oldPath, final File newPath){
        if(!oldPath.isDirectory() || !newPath.isDirectory()){
            new IllegalArgumentException("File mast is Directory");
        }
        if(newPath.exists()){
            new IllegalArgumentException("newFile not is exists");
        }
        try{
            //io耗时操作,放在子线程
            new Thread(new Runnable() {
                @Override
                public void run() {
                    copyFiles(oldPath,oldPath.getPath(),newPath.getPath());
                }
            }).start();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    
    public static void copyFiles(File oldFile,String oldPath,String newPath){
        File[] files = oldFile.listFiles();
        for (int i = 0; i < files.length; i++) {
            System.out.println(files[i].getPath());
            if(files[i].isDirectory()){
                createDirectory(files[i],oldPath,newPath);
                File[] fs = files[i].listFiles();
                if(fs != null && fs.length != 0){//遍历文件夹的下一层
                    copyFiles(files[i],oldPath,newPath);
                }
            }else if(files[i].isFile()){
                copyFile(files[i],oldPath,newPath);
            }
        }
    }
    
    public static void copyFile(File file,String oldPath,String newPath){
        String path = file.getPath();
        String nPath = path.replace(oldPath, newPath);
        File nfile = new File(nPath);
        InputStream in = null;
        OutputStream out = null;
        try {
            in = new FileInputStream(file);
            out = new FileOutputStream(nfile);
            byte[] bs = new byte[1024];
            int len = -1;
            while((len = in.read(bs))!= -1){
                out.write(bs, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try {
                if(in != null){
                    in.close();
                }
                if(out != null){
                    out.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }
    
    public static void createDirectory(File dir,String oldPath,String newPath){
        String path = dir.getPath();
        String nPath = path.replace(oldPath, newPath);
        File file = new File(nPath);
        file.mkdirs();
    }
    

    1. 然后调用就可以了

        File f = new File(Environment.getDataDirectory().getPath()+"/data/"+this.getPackageName() + "/");
        FileUtil.copyPath(f,Environment.getExternalStorageDirectory());
    

    3.sql数据库结构可以参照这篇博客sqllite的数据结构

    相关文章

      网友评论

          本文标题:复制文件夹的工具类

          本文链接:https://www.haomeiwen.com/subject/ovkflxtx.html