文档章节

Java 复制文件和目录

枯藤KT
 枯藤KT
发布于 2015/10/19 11:46
字数 398
阅读 69
收藏 6
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);
            }
        }
    }
}

© 著作权归作者所有

共有 人打赏支持
枯藤KT

枯藤KT

粉丝 4
博文 100
码字总数 61046
作品 0
昌平
程序员
私信 提问
PHP与Java进行通信的实现方法

PHP与Java进行通信的实现方法缘起: 最近做了一个电商平台与网银整合的小东西,程序是开源的 Ecmall的,网银的接口也很规范,给出的文档很全,唯一的小问题是,网银使用的签名和验签的lib是只...

Yomut
07/03
0
0
ubuntu14.04 LTS 配置jdk1.7.0_80

Ubuntu操作系统下如何手动安装JDK1.7呢?本文是我经历的全过程。 Ubuntu版本:14.04 LTS JDK版本:1.7.004 安装目录:/usr/local/development/jdk1.7.004 第一步 安装JDK1.7的过程 1. 打开网...

robingao
2015/11/02
0
0
protocol buffer 对socket协议封装成二进制传输

protocol buffer 是 google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了三种语言的实现:java、c++ 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是...

MrLovelyCbb
2012/02/15
0
0
protocol buffer

protocol buffer 是 google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了三种语言的实现:java、c++ 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是...

MrLovelyCbb
2011/12/08
0
0
java Service warpper安装说明

Java Service Wrapper 官方网站:http://wrapper.tanukisoftware.com 下载地址:http://wrapper.tanukisoftware.com/doc/english/download.jsp 概述: Java Service Wrapper可以把Java应用程......

郭恩洲_OSC博客
2015/03/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Beautiful Soup

定义 Python中的一个库,主要用于从网页爬取数据; 安装 pip install beautifulsoup4 四大对象 Beautiful Soup将复杂的HTML文档转换成树形结构,树中的每个节点都是Python对象,对象可归纳为...

村雨1943
13分钟前
1
0
Visual Studio 昨日发布新版本:增加实时同步编程、共同调试

多名开发者可以在同一个项目中编程,在编写代码和调试代码时只需发送一个 URL 网址,就能邀请他人参与协作,而且无需重新配置开发环境和安装任何附加包。该服务支持 Windows、Mac 与 Linux ...

linuxCool
16分钟前
0
0
发现一种不错的学习方法

这是在《软技能,代码之外的生存之道》所看到的一种学习方法,感觉这个理念不错,分享出来,共勉。 我的「十步学习法」 多年以来,我都承受着巨大的压力:快速学习新技术、新编程语言、新框架...

firepation
16分钟前
0
0
webpack4配置详解之常用插件分享

前言   继上一次webpack的基础配置分享之后,本次将分享一些工作中项目常用的配置插件、也会包含一些自己了解过觉得不错的插件,如有分析不到位的,欢迎纠错,嗯,这些东西文档都有,大佬可...

苏南-首席填坑官
33分钟前
5
1
升压变换器 Boost

工作特点 输入输出极性相同。 开关管 MOS 和负载构成并联,在MOS 导通时,电流通过 L 滤波,电源对 L 充电。 当 MOS 断开时,L 向负载及电源放电,输出电压将是 Ui+U L ,达到升压的目的。 ...

colinux
35分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部