import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.List; /**
* 文件拷贝
* @author lixiaolong
*/
public class FileTransfer { /**
* 使用通道的方式进行整个目录/子目录/文件的拷贝
* @throws IOException
*/
public void useChannel() throws IOException {
String driver = "F:\\AgileController";
String path = "/tomcat/webapps/OPMUI/customize";
File input = new File(driver + path); String bakpath = "\\syncbak";
File bakFile = new File(driver + bakpath);
if(bakFile.exists())
{
deleteFile(bakFile);
}
bakFile.mkdirs(); File output = new File(driver + bakpath + path); if(input.isDirectory()) {
output.mkdirs(); List<File> allFileList = new ArrayList<File>();
getAllFiles(input, allFileList);
for(File f : allFileList) {
String outputPath = f.getCanonicalPath();
if(outputPath.startsWith(driver))
{
outputPath = driver + bakpath + outputPath.substring(driver.length(), outputPath.length());
}
output = new File(outputPath);
if(f.isDirectory())
{
output.mkdirs();
} else {
fileCopy(f, output);
}
}
} else {
fileCopy(input, output);
}
} /**
* 递归列出所有子目录/文件
* @param directory
* @param allFileList
*/
private void getAllFiles(File directory, List<File> allFileList) {
File flist[] = directory.listFiles();
if (flist == null || flist.length == 0) {
return;
}
for (File f : flist) {
if (f.isDirectory()) {
//列出所有子文件夹
allFileList.add(f);
getAllFiles(f, allFileList);
} else {
//列出所有文件
allFileList.add(f);
}
}
} /**
* 使用通道的方式对单个文件进行拷贝
* @param input
* @param output
* @throws IOException
*/
private void fileCopy(File input, File output) throws IOException {
if(!input.exists()) {
return;
} if(!output.exists()) {
output.createNewFile();
} FileInputStream fis = new FileInputStream(input);
FileOutputStream fos = new FileOutputStream(output);
FileChannel inputChannel = null;
FileChannel outputChannel = null;
try {
inputChannel = fis.getChannel();
outputChannel = fos.getChannel();
outputChannel.transferFrom(inputChannel, 0, inputChannel.size());
} finally {
inputChannel.close();
outputChannel.close();
fis.close();
fos.close();
}
} /**
* 级联删除文件
* @param file
*/
private void deleteFile(File file)
{
if (file.isDirectory())
{
File[] files = file.listFiles();
for (File f : files)
{
f.delete();
}
}
file.delete();
} public static void main(String[] args) {
FileTransfer ft = new FileTransfer();
try {
ft.useChannel();
} catch (IOException e) {
System.out.println(e);
}
System.out.println("end");
} }

Java复制目录/子目录/文件的更多相关文章

  1. c#复制包含子目录文件夹代码

    c#没有复制目录的代码,需要通过递归实现复制目录: 需要引用System.IO命名空间,实现代码如下: private static bool CopyDirectory(string SourceP ...

  2. 一个Java复制目录的方法(递归)

    /** * 将目标目录复制为指定目录(也可以用于复制文件) * @param src 源路径 * @param dest 目标路径 * @throws IOException */ public st ...

  3. php复制目录及文件

    <?php /* 复制目录 */ function copydir($dirsrc,$dirto){ if(is_file($dirto)){ echo "目标不是目录不能创建&quo ...

  4. linux cp复制目录所有文件

    mkdir gpio cp -r build/ /home/yl/gpio 这样就把build目录及所有文件都拷贝到gpio文件夹中.

  5. C++复制、压缩文件夹

    之前写过一篇用zlib库来压缩的,但zlib只能压缩文件,我需要压缩文件夹,要想压缩文件夹还得利用zlib库自己写代码,我是真的服了,一个开源库这么不好用. C++复制文件夹也是麻烦事,网上这篇文章: ...

  6. Linux复制和移动文件

    cp:复制文件和目录 cp /etc/log /mu 把/etc/log复制到/mu目录下 -r:递归复制目录 -f:强制复制目录或文件 -i:交互式 -p:保留源文件或目录的属性 mv:移动或重命名 ...

  7. 小师妹学JavaIO之:目录还是文件

    目录 简介 linux中的文件和目录 目录的基本操作 目录的进阶操作 目录的腰疼操作 总结 简介 目录和文件傻傻分不清楚,目录和文件的本质到底是什么?在java中怎么操纵目录,怎么遍历目录.本文F师兄 ...

  8. java 提取目录下所有子目录的文件到指定位置

    package folder; import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundExcept ...

  9. java中实现File文件的重命名(renameTo)、将文件移动到其他目录下、文件的复制(copy)、目录和文件的组合(更加灵活方便)

    欢迎加入刚建立的社区:http://t.csdn.cn/Q52km 加入社区的好处: 1.专栏更加明确.便于学习 2.覆盖的知识点更多.便于发散学习 3.大家共同学习进步 3.不定时的发现金红包(不多 ...

随机推荐

  1. 为什么不应该使用Zookeeper做服务发现?(转载)

    转载自: http://dockone.io/article/78 [编者的话]本文作者通过ZooKeeper与Eureka作为Service发现服务(注:WebServices体系中的UDDI就是个 ...

  2. 基于【CentOS-7+ Ambari 2.7.0 + HDP 3.0】HAWQ数据仓库 使用之 gpfdist协议

    一.HAWQ基本安装自带gpfdist协议 gpfdist是HAWQ支持的外部表访问协议之一,这是hawq自带的一个简单的集成http服务命令. 在我的前述安装hawq之后,gpfdist命令位于ha ...

  3. MTK NTP和NITZ更新时间的问题

    NITZ(Network Identity and Time Zone,网络标识和时区),是一种用于自动配置本地的时间和日期的机制,同时也通过无线网向移动设备提供运营商信息.NITZ是自从PHASE ...

  4. Nginx 配置参数详解

    #定义Nginx运行的用户和用户组 user www www;   #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8;   #全局错误日志定义类型,[ debu ...

  5. 超简单C#获取带汉字的字符串真实长度(单个英文长度为1,单个中文长度为2)

    https://blog.csdn.net/u014732824/article/details/84952848 int i = System.Text.Encoding.Default.GetBy ...

  6. Mac 安装win10操作系统

    因为是做苹果开发的,用的一直是苹果的系统,前两天因为想要做内网穿透,需要用到花生壳这个软件,问题是这个软件只有windows版本和Linux版本,所以就想在苹果电脑上装一个windows系统,也想借此 ...

  7. jenkins git 之 Advanced clone behaviours

    jenins 上的 Git Plugin插件,默认是下载完整的历史版本,随着分支约多,历史版本约多,整个文件会很大,下载常常会超时. 单独的git命令可以使用以下方式来优化 git clone --d ...

  8. 使用isEmpty()报空指针异常

    使用isEmpty()是出现了空指针异常NullpointException: 原来isEmpty()用来判断一个变量是否已经初始化了,因为“”和new 的时候系统都会为其分配内存,不管是否有值,当为 ...

  9. linux部署的flask项目配置static

    环境: Python2.7 flask nginx linux的系统是Ubantu Python:我的是linux已经有的. flask:pip install flask nginx:sudo ap ...

  10. 如何使用Vue-cli搭建和运行vue项目

    此文章  主要参考:https://jingyan.baidu.com/article/5225f26bbb430fe6fa0908ce.html 在vue init webpack my-proje ...