文档章节

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
博文 103
码字总数 61202
作品 0
昌平
程序员
私信 提问
在 Sublime Text 2 中编译和运行 Java 程序

Sublime Text 2 是我最喜欢用来编码的文本编辑器,如果你尝试使用后相信你也会喜欢上它的。在这篇文章中我们将讨论如何在 Sublime Text 2 中编译和运行 Java 程序。 第一步:设置 Java PATH ...

oschina
2013/01/04
29.9K
35
对java的反编译插件jad的用后感

刚开始我在网上下载了jad这个工具就以为可以进行java的反编译了,没想到还要下载一个jadclipse,然后在网上找了N久终于找到关于这两个东西装到eclipse的方法,首先是把jadclipse.jar包复制到...

小fa
2012/09/15
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
Ubuntu 18.04.1 搭建Java环境和HelloWorld

一、搭建Java环境 系统环境 Ubuntu 18.04.1 JDK 8 IDEA 2018.2 1.下载JDK 官网地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 选择相应的版本,点击jdk,进入下...

王磊的博客
2018/08/24
0
0
protocol buffer 对socket协议封装成二进制传输

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

MrLovelyCbb
2012/02/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

远程获得的有趣的linux命令

使用这些工具从远程了解天气、阅读资料等。 我们即将结束为期 24 天的 Linux 命令行玩具日历。希望你有一直在看,如果没有,请回到开始,从头看过来。你会发现 Linux 终端有很多游戏、消遣和...

Linux就该这么学
18分钟前
3
0
Apollo配置详细步骤(Windows环境)

一. 准备工作 1.下载 apollo 安装包 下载链接:http://activemq.apache.org/apollo/download.html 2.下载 java JDK 安装包 ( apollo 依赖 java 环境) 下载链接:http://www.oracle.com/techn......

morpheusWB
40分钟前
3
0
聊聊flink的AsyncWaitOperator

序 本文主要研究一下flink的AsyncWaitOperator AsyncWaitOperator flink-streaming-java_2.11-1.7.0-sources.jar!/org/apache/flink/streaming/api/operators/async/AsyncWaitOperator.java ......

go4it
今天
1
0
Java并发编程基础(四)

ThreadGroup 在主线程创建得线程,如果没有给他指定线程组,那么创建的线程,默认和主线程同一个线程组。线程组可以底下可以是线程,也可以实线程组。 构建线程组的方法: private ThreadGr...

chendom
今天
5
0
Scala学习(一)

学习Spark之前需要学习Scala。 参考学习的书籍:快学Scala

柠檬果过
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部