本帖最后由 袁冬梅 于 2012-5-11 13:32 编辑
不多说,我先上一个代码:
代码是复制工程下面的“实验2” 这个文件夹下面的全部内容到这个工程下面的"实验3"下面。- package cn.itcast.test3;
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- public class CopyDirWhihContents {
- public static void main(String[] args)
- {
- File fileName;
- fileName = new File("实验2"); //想要被复制的目标文件夹
- String parentDirectory = "bin/cn/itcast/test3"; //复制文件夹到这个目标目录下面
- copyDir(fileName,parentDirectory);
- copyAllFile(fileName,parentDirectory);
- }
- //复制全部文件包括文件夹
- public static void copyAllFile(File fileName,String parentDirectory)
- {
- File[] fileList = fileName.listFiles();
- for(File f : fileList)
- {
- String srcPath = f.getPath();
- System.out.println();
- System.out.println("srcPath: "+srcPath);
- String Star = "\\";
- String destFile = parentDirectory+Star+ srcPath;
- if(f.isDirectory())
- {
- copyAllFile(f,parentDirectory);
- }else{
-
- System.out.println("目标文件为:"+destFile);
- copyOneFile(srcPath, destFile);
- }
- }
- }
- //复制一个文件
- private static void copyOneFile(String srcPath, String destPath) {
- BufferedInputStream bufr = null;
- BufferedOutputStream bufw = null;
- try {
- bufr = new BufferedInputStream(new FileInputStream(srcPath));
- bufw = new BufferedOutputStream(new FileOutputStream(destPath));
- byte[] buf = new byte[1024];
- int len;
- while((len = bufr.read(buf)) != -1)
- {
- bufw.write(buf, 0, len);
- bufw.flush();
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }finally{
- if(bufr != null)
- try {
- bufr.close();
- } catch (IOException e) {
- System.out.println("关闭输入流失败!");
- }
- if(bufw != null)
- try {
- bufw.close();
- } catch (IOException e) {
- System.out.println("关闭输出流失败!");
- }
- }
- }
- //复制目录
- private static void copyDir(File fileName,String parentDirectory)
- {
- File[] fileList = fileName.listFiles();
- for(File f : fileList)
- {
- if(f.isDirectory())
- {
- String srcPath = f.getPath();
- System.out.println();
- System.out.println("srcPath: "+srcPath);
- String Star = "\\";
- String destDir = parentDirectory+Star+ srcPath;
- System.out.println("创建目标目录: "+destDir);
- System.out.println("创建目录!"+new File(destDir).mkdirs());//创建目标目录: 实验3\实验2\1\ 实验2\1\2.1
- copyDir(f,parentDirectory);
- }
- }
- }
- }
复制代码 代码修改后:- //复制全部文件包括文件夹
- public static void copyAllFile(File fileName,String parentDirectory)
- {
- File[] fileList = fileName.listFiles();
- for(File f : fileList)
- {
- String srcPath = f.getPath();
- System.out.println();
- System.out.println("srcPath: "+srcPath);
- String Star = "\\";
- String destFile = parentDirectory+Star+ srcPath;
- if(f.isDirectory())
- {
- new File(destFile).mkdirs();//我想主函数中先把目录创建好的步骤不做,创建目录的步骤直接丢掉,直接在这里边遍历就边创建目录应该不会出问题吧?
- //我自己试验的时候,创建倒是没有出问题,不过我怕的是,会不会有文件在我复制好目录之前,
- //就有这个目录中的文件需要被复制,这样的话,不就找不到文件要在的目录了?
- //所以,我想问问,复制文件夹的时候,我这样做不会有问题吧?好吧,我分析代码的时候,
- //感觉是不会有问题的,但是不怕万一就怕一万,大家知道的帮我看看吧,谢谢
- copyAllFile(f,parentDirectory);
- }else{
-
- System.out.println("目标文件为:"+destFile);
- copyOneFile(srcPath, destFile);
- }
- }
- }
复制代码 |
|