Java 复制文件和目录

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.RuntimeException;
public class Copy {
    private static void copyFile(File from, File to) {
        System.out.println("开始拷贝文件:" + from.getAbsolutePath() + " --------> " + to.getAbsolutePath());
        byte buf[] = new byte[1024];
        int count = 0;
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            bis = new BufferedInputStream(new FileInputStream(from));
            bos = new BufferedOutputStream(new FileOutputStream(to));
            if (bis != null && bos != null) {
                while ((count = bis.read(buf)) != -1) {
                    bos.write(buf, 0, count);
                    bos.flush();
                }
            }
        } catch (IOException e) {
            throw new RuntimeException("文件复制异常!", e);
        } finally {
            try {
                if (bis != null)
                    bis.close();
                if (bos != null)
                    bos.close();
            } catch (IOException ex) {
                throw new RuntimeException("文件关闭失败!", ex);
            }
        }
    }
    private static void copyDir(File fromDir, File toDir) {
        if (!toDir.exists()) {
            toDir.mkdirs();
        }
        File[] files = fromDir.listFiles();
        for (File f : files) {
            if (f.isFile()) {
                File t = new File(toDir, f.getName());
                if (confirmRewrite(t)) {
                    copyFile(f, t);
                } else {
                    continue;
                }
            } else if (f.isDirectory()) {
                if (f.getName().equals(toDir.getName())) {
                    continue;
                }
                copyDir(f, new File(toDir, f.getName()));
            }
        }
    }

    private static boolean confirmRewrite(File to) {
        if (to.exists()) {
            System.out.print("文件已经存在,是否覆盖?[y|n]:");
            char confirm;
            try {
                confirm = (char) System.in.read();
                System.in.skip(System.in.available());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            if (confirm == ‘y‘)
                return true;
            else
                return false;
        } else {
            return true;
        }
    }
    public static void main(String args[]) {
        if (args.length != 2) {
            System.err.println("Arguments num error!");
            System.err.println("usage:java Copy " + "from  to");
            return;
        }
        File from = new File(args[0]);
        File to = new File(args[1]);
        if (!from.exists())
            throw new RuntimeException(new FileNotFoundException("文件或目录不存在!"));
        /*
         * 目的地存在的话,如果是文件,则源地址也必须是文件;如果目的地是目录,源地址可以是文件,也可以是目录。
         */
        if (to.exists()) {
            // 如果目的地址存在
            if (to.isFile() && from.isFile()) {
                if(confirmRewrite(to)){
                    copyFile(from, to);
                }else{
                    return;
                }
            } else if (to.isDirectory()) {
                if (from.isFile()) {
                    File temp=new File(to, from.getName());
                    if(confirmRewrite(temp))
                        copyFile(from, temp);
                } else {
                    copyDir(from, to);
                }
            } else {
                throw new RuntimeException(new IOException("不允许将目录复制到文件!"));
            }
        } else {
            // 如果目的地址不存在
            if (from.isFile()) {
                copyFile(from, to);
            } else {
                to.mkdirs();
                copyDir(from, to);
            }
        }
    }
}
时间: 2024-08-03 11:53:14

Java 复制文件和目录的相关文章

java复制文件与文件夹

复制文件或文件夹时,可以写一个方法,接受两个File类型参数.一个是要复制的文件,另一个是要复制的地方.方法具体大概是这样,先判断 源文件是文件还是文件夹,如是文件,就在目标路径里用字节流复制该文件.关键在于如何在目标路径里复制文件.可以创建一个File对象参数为目标对象+源文件.getName().如果是文件夹,就在目标路径里复制一个文件夹,即创建一个File对象构造参数为目标+源文件路径.getName. 在用File对象的 mkdir 在本地创建文件夹. 然后获取要复制的文件夹中的文件.遍

JAVA复制文件最快的算法

/** * 复制文件 * * @param srcFile * 源文件File * @param destDir * 目标目录File * @param newFileName * 新文件名 * @return 实际复制的字节数,如果文件.目录不存在.文件为null或者发生IO异常,返回-1 */ public static long copyFile1(File srcFile, File destDir, String newFileName) { long copySizes = 0; i

java 复制文件夹中epub、html、txt文件 (按原来文件夹存放)

原来文件夹中的文件:有epub/html/txt import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /** * 复制文件夹中所有包含.epub后缀的文件 * @author fibre * parameter SUFFIX = ".epub&qu

复制文件或目录linux命令

复制文件或目录命令:  复制文件:  (1)将本地文件拷贝到远程  scp 文件名用户名@计算机IP或者计算机名称:远程路径 本地192.168.1.8客户端  scp /root/install.* [email protected]:/usr/local/src (2)从远程将文件拷回本地  scp 用户名@计算机IP或者计算机名称:文件名本地路径 本地192.168.1.8客户端取远程服务器12.11上的文件  scp [email protected]:/usr/local/src/*.

-scp Linux之间复制文件和目录

scp 简介 scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来.另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了.虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常

java复制文件

package com.test.tes; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Date; /** * 复制文件到指定目录下 * @author Wdnncey * */ public class Copy { public static long forJava(File f1,File f2) throws Exceptio

java复制文件夹及所有子目录和文件

package text; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStrea

java创建文件和目录

[java] view plain copy 创建文件和目录的关键技术点如下: [java] view plain copy <pre name="code" class="java">    1.File类的createNewFile根据抽象路径创建一个新的空文件,当抽象路径制定的文件存在时,创建失败 2.File类的mkdir方法根据抽象路径创建目录 3.File类的mkdirs方法根据抽象路径创建目录,包括创建必需但不存在的父目录 4.File类的

Ubuntu中复制文件或目录的命令

cp命令 语法: cp     [选项]      源文件或目录      目标文件或目录 说明:该命令把指定的源文件复制到目标文件 或把多个源文件复制到目标目录中. 各选项含义如下: - a 该选项通常在拷贝目录时使用.它保留链接.文件属性,并递归地拷贝目录,其作用等于dpR选项的组合. - d 拷贝时保留链接. - f  删除已经存在的目标文件而不提示. - i  和f选项相反,在覆盖目标文件之前将给出提示要求用户确认. - p 此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制