Java复制目录/子目录/文件
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复制目录/子目录/文件的更多相关文章
- c#复制包含子目录文件夹代码
c#没有复制目录的代码,需要通过递归实现复制目录: 需要引用System.IO命名空间,实现代码如下: private static bool CopyDirectory(string SourceP ...
- 一个Java复制目录的方法(递归)
/** * 将目标目录复制为指定目录(也可以用于复制文件) * @param src 源路径 * @param dest 目标路径 * @throws IOException */ public st ...
- php复制目录及文件
<?php /* 复制目录 */ function copydir($dirsrc,$dirto){ if(is_file($dirto)){ echo "目标不是目录不能创建&quo ...
- linux cp复制目录所有文件
mkdir gpio cp -r build/ /home/yl/gpio 这样就把build目录及所有文件都拷贝到gpio文件夹中.
- C++复制、压缩文件夹
之前写过一篇用zlib库来压缩的,但zlib只能压缩文件,我需要压缩文件夹,要想压缩文件夹还得利用zlib库自己写代码,我是真的服了,一个开源库这么不好用. C++复制文件夹也是麻烦事,网上这篇文章: ...
- Linux复制和移动文件
cp:复制文件和目录 cp /etc/log /mu 把/etc/log复制到/mu目录下 -r:递归复制目录 -f:强制复制目录或文件 -i:交互式 -p:保留源文件或目录的属性 mv:移动或重命名 ...
- 小师妹学JavaIO之:目录还是文件
目录 简介 linux中的文件和目录 目录的基本操作 目录的进阶操作 目录的腰疼操作 总结 简介 目录和文件傻傻分不清楚,目录和文件的本质到底是什么?在java中怎么操纵目录,怎么遍历目录.本文F师兄 ...
- java 提取目录下所有子目录的文件到指定位置
package folder; import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundExcept ...
- java中实现File文件的重命名(renameTo)、将文件移动到其他目录下、文件的复制(copy)、目录和文件的组合(更加灵活方便)
欢迎加入刚建立的社区:http://t.csdn.cn/Q52km 加入社区的好处: 1.专栏更加明确.便于学习 2.覆盖的知识点更多.便于发散学习 3.大家共同学习进步 3.不定时的发现金红包(不多 ...
随机推荐
- 为什么不应该使用Zookeeper做服务发现?(转载)
转载自: http://dockone.io/article/78 [编者的话]本文作者通过ZooKeeper与Eureka作为Service发现服务(注:WebServices体系中的UDDI就是个 ...
- window/linux composer安装/卸载
packagist库:https://packagist.org/ window 安装 参考地址:https://www.kancloud.cn/thinkphp/composer/35668 1. ...
- java,php,js;AES 互通加解密
1,Java端(依赖 common-codec jar) package com.jiaMi; import javax.crypto.Cipher; import javax.crypto.sp ...
- MySQL加密解密
1. 加密:mysql323,不可逆 select old_password('bbs.antian365.com'); # 10c886615b135b38 2. 加密:mysqlsha1,不可逆 ...
- 133、 Android 自动化测试(转载)
Android 自动化测试--要点概括http://blog.csdn.net/vshuang/article/details/40595233 A/B测试与灰度发布http://blog.csdn. ...
- 给vscode添加右键打开功能
将以下文本存为vscode.reg,然后运行: Windows Registry Editor Version 5.00 ; Open files [HKEY_CLASSES_ROOT\*\shel ...
- java 的访问权限控制
package test06; public class PermissionModel { private int age; public String name; public int getAg ...
- mysql获取相隔时间段的数据
思路:为时间段内的数据进行编序号,然后计算好相隔时间,拿到id作为搜索条件 SELECT * FROM ( SELECT (@i:=@i+1) as i, id, data_send_time FRO ...
- POJ 3414 pots (未解决)
http://poj.org/problem?id=3414 #include <iostream> #include <cstdio> #include <queue& ...
- 9、BOM (浏览器对象模型)
1.认识BOM js 三个部分: 1.ECMAScript标准 ECMA5 ECMA6 2.BOM Browser Object Model 浏览器对象模型 3.DOM 文档对象类型 window对象 ...