FileOperator 文件(夹)操作类

Posted duanwandao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FileOperator 文件(夹)操作类相关的知识,希望对你有一定的参考价值。

public class FileOperator {

    /**
     * 复制文件目录
     * @param srcDir 要复制的源目录 eg:/mnt/sdcard/DB
     * @param destDir 复制到的目标目录 eg:/mnt/sdcard/db/
     * @return
     */
    public static boolean copyDir(String srcDir, String destDir){
        File sourceDir = new File(srcDir);
        //判断文件目录是否存在
        if(!sourceDir.exists()){
            return false;
        }
        //判断是否是目录
        if (sourceDir.isDirectory()) {
            File[] fileList = sourceDir.listFiles();
            File targetDir = new File(destDir);
            //创建目标目录
            if(!targetDir.exists()){
                targetDir.mkdirs();
            }
            //遍历要复制该目录下的全部文件
            for(int i= 0;i<fileList.length;i++){
                if(fileList[i].isDirectory()){//如果如果是子目录进行递归
                    copyDir(fileList[i].getPath()+ "/",
                            destDir + fileList[i].getName() + "/");
                }else{//如果是文件则进行文件拷贝
                    copyFile(fileList[i].getPath(), destDir +fileList[i].getName());
                }
            }
            return true;
        }else {
            copyFileToDir(srcDir,destDir);
            return true;
        }
    }


    /**
     * 复制文件(非目录)
     * @param srcFile 要复制的源文件
     * @param destFile 复制到的目标文件
     * @return
     */
    private static boolean copyFile(String srcFile, String destFile){
        try{
            InputStream streamFrom = new FileInputStream(srcFile);
            OutputStream streamTo = new FileOutputStream(destFile);
            byte buffer[]=new byte[1024];
            int len;
            while ((len= streamFrom.read(buffer)) > 0){
                streamTo.write(buffer, 0, len);
            }
            streamFrom.close();
            streamTo.close();
            return true;
        } catch(Exception ex){
            return false;
        }
    }


    /**
     * 把文件拷贝到某一目录下            /data/test03apk
     * @param srcFile
     * @param destDir
     * @return
     */
    public static String copyFileToDir(String srcFile, String destDir) {
        File fileDir = new File(destDir);
        if (!fileDir.exists()) {
            fileDir.mkdir();
        }
        String destFile = destDir +"/" + new File(srcFile).getName();

        try{
            InputStream streamFrom = new FileInputStream(srcFile);
            OutputStream streamTo = new FileOutputStream(destFile);
            byte buffer[]=new byte[1024];
            int len;
            while ((len= streamFrom.read(buffer)) > 0){
                streamTo.write(buffer, 0, len);
            }
            streamFrom.close();
            streamTo.close();
            Log.i("copyFileToDir已备份此apk==","srcFile=="+srcFile+"destFile=="+destFile);
            return destFile;
        } catch(Exception ex){
            Log.i("备份apk失败==",destFile);
            ex.printStackTrace();
            return null;
        }
    }

    /**
     * 把文件拷贝到某一目录下            /data/test03apk
     * @param srcFile
     * @param destDir
     * @return
     */
    public static String copyFileToDir2(String srcFile, String destDir, String destName) {
        File fileDir = new File(destDir);
        if (!fileDir.exists()) {
            fileDir.mkdir();
        }
        String destFile = destDir +"/" + destName+".apk";
        try{
            InputStream streamFrom = new FileInputStream(srcFile);
            OutputStream streamTo = new FileOutputStream(destFile);
            byte buffer[]=new byte[1024];
            int len;
            while ((len= streamFrom.read(buffer)) > 0){
                streamTo.write(buffer, 0, len);
            }
            streamFrom.close();
            streamTo.close();
            Log.i("copyFileToDir2已备份此apk==","srcFile=="+srcFile+"
destFile=="+destFile);
            return destFile;
        } catch(Exception ex){
            Log.i("备份apk失败==",destFile);
            ex.printStackTrace();
            return null;
        }
    }

    /**
     * 移动文件目录到某一路径下
     * @param srcFile
     * @param destDir
     * @return
     */
    public static boolean moveFile(String srcFile, String destDir) {
        //复制后删除原目录
        if (copyDir(srcFile, destDir)) {
            deleteFile(new File(srcFile));
            return true;
        }
        return false;
    }

    /**
     * 删除文件(包括目录)
     * @param delFile
     */
    public static void deleteFile(File delFile) {
        //如果是目录递归删除
        if (delFile.isDirectory()) {
            File[] files = delFile.listFiles();
            for (File file : files) {
                deleteFile(file);
            }
        } else {
            delFile.delete();
            Log.i("已删除==",delFile.getName());
        }
        //如果不执行下面这句,目录下所有文件都删除了,但是还剩下子目录空文件夹
        delFile.delete();
    }

    public static String searchFile(String keyword) {
        String result = "";
        File[] files = new File("/data/app").listFiles();
        for (File file : files) {
            if (file.getName().indexOf(keyword) >= 0) {
                result += file.getPath() + "
";
            }
        }
        if (result.equals("")){
            result = "找不到文件!!";
        }
        return result;

    }
}

 

以上是关于FileOperator 文件(夹)操作类的主要内容,如果未能解决你的问题,请参考以下文章

模拟CMD操作文件(夹)

Java文件File操作一:文件的创建和删除

Android文件基本操作(创建文件(夹)复制文件(夹)设置文件访问权限)

常用文件(夹)处理方法工具类

在 Xamarin Forms 中找不到可移植类库文件夹

在Android中,如何将数据从类传递到相应的布局/片段文件?