韦念欣 发表于 2012-6-27 23:13
这个是我写的一个拷贝某文件夹中的.java文件到另个文件夹中,拷贝后要保持原文件夹的目录。
楼主可以参考 ...
/**
* 拷贝某文件夹中的.java文件到另个文件夹中,拷贝后要保持源文件夹的目录。
* 思路:
* 1)定义拷贝文件的函数,接收两个文件参数(源和目标)
* 2)对源目录进行判断,不存在,抛异常,如果存在,先判断是否是文件,如果是则调用复制文件的功能
*
* 3)如果是是目录,调用 File.listFiles()方法将文件存储进数组
* 4)遍历数组,判断文件,如果是目录,获取该文件名,在目的处创建一个,并在次掉用copyDir()的功能
* 5)如果是.java文件,调用copyFile()的功能对文件进行复制
*
* 代码实现如下
*/
import java.io.*;
import java.util.*;
public class CopyFile {
private static final int BUFFER_SIZE = 1024 * 1024;
public static void main(String[] args) throws IOException {
File fromPath = new File("c:\\program files\\java"); // 从这个目录
File toPath = new File("D:\\"); // 复制到这个目录
copyDir(fromPath, toPath); // 开始复制
}
/**
* 定义功能,对目录进行拷贝
* @param fromPath
* @param toPath
* @throws IOException
*/
private static void copyDir(File fromPath, File toPath) throws IOException {
//对给定的目录进行判断,不存在,则抛出异常
if (!fromPath.exists()) {
throw new RuntimeException("目录不存,请重新输入!");
}
else if (fromPath.isFile()) {
copyFiles(fromPath, toPath);
} else {
File[] files = fromPath.listFiles(); // 将目录中的文件存储进数组
for (File file : files) { // 对数组进行遍历
// 对文件进行判断,如果是文件,则继续调用copyDir方法,递归
if (file.isDirectory()) {
//获取文件的的绝对路径,和文件名,并封装
//这为什么要获取绝对路径+“\\”+文件名啊啥意思,不太明白。。。。。。。。。。。。。。 File dir = new File((toPath.getAbsolutePath() + "\\" + fromPath.getName()));
System.out.println(dir.getAbsolutePath());
dir.mkdirs(); // 在目的地创建文件夹
copyDir(file, dir); // 对目录进行递归,深度遍历
} else if (file.getName().endsWith(".java")){
copyFiles(file, toPath); // 调用复制文件的功能
}
}
}
}
/**
* 定义复制文件的功能
* @param sFile
* @param pFile
* @throws IOException
*/
private static void copyFiles(File sFile, File pFile) throws IOException {
FileInputStream fis = null;
FileOutputStream fos = null;
File fromFile = sFile.getAbsoluteFile(); //还有这。。。。
// 创建集合,对文件的父目录进行切割,并存储进集合
List<String> list = Arrays.asList(sFile.getParent().split("\\\\")); //这为什么要切割。。。:L
// 获取文件的直接父目录的字符串
String str = list.get(list.size() - 1);
// 获取目标的绝对路径,和文件的父目录,并在目的地创建文件夹
new File(pFile.getAbsoluteFile() + "\\" + str).mkdirs(); //这个也要解释下。。。
// 获取文件上传的目的地
String newfileName = pFile.toString() + "\\" + str;
// 获取文件名
String fileName = fromFile.getName();
// 创建流关联文件,并写入目的地
fis = new FileInputStream(fromFile);
fos = new FileOutputStream(newfileName + "\\" + fileName);
byte[] buf = new byte[BUFFER_SIZE];
int len = 0;
while ((len = fis.read(buf)) != -1) {
fos.write(buf, 0, len);
}
//关流
fis.close();
fos.close();
}
}
好复杂啊。。。。。 枉哥们耐心,详解。 哥们在此谢过。。。:handshake |