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. laravel5.8笔记四:路由

    laravel框架,必须先设置路由,才可以访问内部的控制器部分. 路由文件:routes/web.php. 基本路由 Route::get('/user', 'UserController@index ...

  2. 智能聊天机器人——基于RASA搭建

    前言: 最近了解了一下Rasa,阅读了一下官方文档,初步搭建了一个聊天机器人. 官方文档:https://rasa.com/docs/ 搭建的chatbot项目地址: https://github.c ...

  3. [原]Jenkins(十六) jenkins再出发之jenkins+robot+blue ocean+svn

    jenkins version: 部署省略..(如有需要请查看本博客jenkins系列的文档) 新的jenkins需要先填写administratorpassword (如下图)找到下面红色的路径打开 ...

  4. E - BD String

    众所周知,度度熊喜欢的字符只有两个:B和D. 今天,它发明了一种用B和D组成字符串的规则: S(1)=B S(2)=BBD S(3)=BBDBBDD - S(n)=S(n−1)+B+reverse(f ...

  5. Solve Docker for Windows error: docker detected, A firewall is blocking file Sharing between Windows and the containers

    被这个“分享硬盘”问题烦了我好几个小时,终于在一个叫Marco Mansi外国人博客上找到解决方法了,真的很无奈 https://blog.olandese.nl/2017/05/03/solve-d ...

  6. Java模版方法的另一种实现

    面试荔枝FM杯具,遂死磕AQS途中发现一个有趣的模版用法,记下来. 模版方法是很重要的设计模式,在数据访问层.众多的插件接口都可见其影子,一般的实现都是在模版中定义抽象方法并使用其方法进行算法,让具体 ...

  7. Spring-Boot构建多模块项目

    Spring-Boot构建多模块项目 功能模块单独项目开发,可以将一个庞大的项目分解成多个小项目,便于细分开发 Maven多模块项目不能独立存在,必须有一个介质来包含. 1.创建一个Maven 项目, ...

  8. python学习之旅(五)

    Python基础知识(4):基础数据类型之字符串(Ⅰ) 字符串是 Python 中最常用的数据类型.可以使用引号“ ”来创建字符串,只要为变量分配一个值即可.例如: name=“Alice” 注:字符 ...

  9. MySql的主从复制以及读写分离详解

    MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中, ...

  10. 做一个vue的todolist列表

    <template> <div id="app"> <input type="text" v-model="todo&q ...