当前位置: 移动技术网 > IT编程>开发语言>Java > java实现文件复制、剪切文件和删除示例

java实现文件复制、剪切文件和删除示例

2019年07月22日  | 移动技术网IT编程  | 我要评论

复制代码 代码如下:

import java.io.file;
import java.io.fileinputstream;
import java.io.fileoutputstream;
import java.io.ioexception;

/**
 * java实现文件复制、剪切、删除操作
 * 文件指文件或文件夹
 * 文件分割符统一用"\\"
 */

public class fileoperatedemo {

    /**
     * 复制文件或文件夹
     * @param srcpath 源文件或源文件夹的路径
     * @param destdir 目标文件所在的目录
     * @return
     */
    public static boolean copygeneralfile(string srcpath, string destdir) {
        boolean flag = false;
        file file = new file(srcpath);
        if(!file.exists()) { // 源文件或源文件夹不存在
            return false;
        }

        if(file.isfile()) {    // 文件复制
            flag = copyfile(srcpath, destdir);
        }
        else if(file.isdirectory()) { // 文件夹复制
            flag = copydirectory(srcpath, destdir);
        }

        return flag;
    }

    /**
     * 默认的复制文件方法,默认会覆盖目标文件夹下的同名文件
     * @param srcpath
     *            源文件绝对路径
     * @param destdir
     *            目标文件所在目录
     * @return boolean
     */
    public static boolean copyfile(string srcpath, string destdir) {
     return copyfile(srcpath, destdir, true/**overwriteexistfile*/); // 默认覆盖同名文件
    }

    /**
     * 默认的复制文件夹方法,默认会覆盖目标文件夹下的同名文件夹
     * @param srcpath    源文件夹路径
     * @param destpath    目标文件夹所在目录
     * @return boolean
     */
    public static boolean copydirectory(string srcpath, string destdir) {
     return copydirectory(srcpath, destdir, true/**overwriteexistdir*/);
    }

    /**
     * 复制文件到目标目录
     * @param srcpath
     *            源文件绝对路径
     * @param destdir
     *            目标文件所在目录
     * @param overwriteexistfile
     *            是否覆盖目标目录下的同名文件
     * @return boolean
     */
    public static boolean copyfile(string srcpath, string destdir, boolean overwriteexistfile) {
        boolean flag = false;

        file srcfile = new file(srcpath);
        if (!srcfile.exists() || !srcfile.isfile()) { // 源文件不存在
            return false;
        }

        //获取待复制文件的文件名
        string filename = srcfile.getname();
        string destpath = destdir + file.separator +filename;
        file destfile = new file(destpath);
        if (destfile.getabsolutepath().equals(srcfile.getabsolutepath())) { // 源文件路径和目标文件路径重复
            return false;
        }
        if(destfile.exists() && !overwriteexistfile) {    // 目标目录下已有同名文件且不允许覆盖
            return false;
        }

        file destfiledir = new file(destdir);
        if(!destfiledir.exists() && !destfiledir.mkdirs()) { // 目录不存在并且创建目录失败直接返回
         return false;
        }

        try {
            fileinputstream fis = new fileinputstream(srcpath);
            fileoutputstream fos = new fileoutputstream(destfile);
            byte[] buf = new byte[1024];
            int c;
            while ((c = fis.read(buf)) != -1) {
                fos.write(buf, 0, c);
            }
            fos.flush();
            fis.close();
            fos.close();

            flag = true;
        } catch (ioexception e) {
            e.printstacktrace();
        }

        return flag;
    }

    /**
     *
     * @param srcpath    源文件夹路径
     * @param destpath    目标文件夹所在目录
     * @return
     */
    public static boolean copydirectory(string srcpath, string destdir, boolean overwriteexistdir) {
        if(destdir.contains(srcpath))
           return false;

        boolean flag = false;

        file srcfile = new file(srcpath);
        if (!srcfile.exists() || !srcfile.isdirectory()) { // 源文件夹不存在
            return false;
        }

        //获得待复制的文件夹的名字,比如待复制的文件夹为"e:\\dir\\"则获取的名字为"dir"
        string dirname = srcfile.getname();

        //目标文件夹的完整路径
        string destdirpath = destdir + file.separator + dirname + file.separator;
        file destdirfile = new file(destdirpath);
        if(destdirfile.getabsolutepath().equals(srcfile.getabsolutepath())) {
         return false;
        }
        if(destdirfile.exists() && destdirfile.isdirectory() && !overwriteexistdir) {    // 目标位置有一个同名文件夹且不允许覆盖同名文件夹,则直接返回false
            return false;
        }

        if(!destdirfile.exists() && !destdirfile.mkdirs()) {  // 如果目标目录不存在并且创建目录失败
         return false;
        }

        file[] filelist = srcfile.listfiles();    //获取源文件夹下的子文件和子文件夹
        if(filelist.length==0) {    // 如果源文件夹为空目录则直接设置flag为true,这一步非常隐蔽,debug了很久
            flag = true;
        }
        else {
            for(file temp: filelist) {
                if(temp.isfile()) {    // 文件
                    flag = copyfile(temp.getabsolutepath(), destdirpath, overwriteexistdir);     // 递归复制时也继承覆盖属性
                }
                else if(temp.isdirectory()) {    // 文件夹
                    flag = copydirectory(temp.getabsolutepath(), destdirpath, overwriteexistdir);   // 递归复制时也继承覆盖属性
                }

                if(!flag) {
                    break;
                }
            }
        }

        return flag;
    }

    /**
     * 删除文件或文件夹
     * @param path
     *            待删除的文件的绝对路径
     * @return boolean
     */
    public static boolean deletefile(string path) {
        boolean flag = false;

        file file = new file(path);
        if (!file.exists()) { // 文件不存在直接返回
            return flag;
        }

        flag = file.delete();

        return flag;
    }

   
    /**
     * 由上面方法延伸出剪切方法:复制+删除
     * @param  destdir 同上
     */
    public static boolean cutgeneralfile(string srcpath, string destdir) {
     boolean flag = false;
        if(copygeneralfile(srcpath, destdir) && deletefile(srcpath)) { // 复制和删除都成功
         flag = true;
        }

        return flag;
    }

    public static void main(string[] args) {
     /** 测试复制文件 */
     system.out.println(copygeneralfile("d://test/test.html", "d://test/test/"));  // 一般正常场景
     system.out.println(copygeneralfile("d://notexistfile", "d://test/"));      // 复制不存在的文件或文件夹
     system.out.println(copygeneralfile("d://test/test.html", "d://test/"));      // 待复制文件与目标文件在同一目录下
     system.out.println(copygeneralfile("d://test/test.html", "d://test/test/"));  // 覆盖目标目录下的同名文件
     system.out.println(copyfile("d://test/", "d://test2", false)); // 不覆盖目标目录下的同名文件
     system.out.println(copygeneralfile("d://test/test.html", "notexist://noexistdir/")); // 复制文件到一个不可能存在也不可能创建的目录下

     system.out.println("---------");

     /** 测试复制文件夹 */
     system.out.println(copygeneralfile("d://test/", "d://test2/"));

     system.out.println("---------");

     /** 测试删除文件 */
     system.out.println(deletefile("d://a/"));
    }

}

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网