这个是我写的一个拷贝某文件夹中的.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("\\\\"));
- // 获取文件的直接父目录的字符串
- 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();
- }
- }
复制代码 |