A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package filedemo;

//复制文件夹
import java.io.*;
public class FileDirCopy {

        public static void main(String[] args) {
                copyDir(new File("c:\\demo"),new File("d:\\"));
        }

        private static void copyDir(File source,File target) {
                //获取要备份的文件夹名字,创建备份的文件夹。
                File targetFile = new File(target,source.getName());
                        targetFile.mkdir();
                //获取文件夹下的文件名,创建备份的文件。
                File[] file = source.listFiles();
                for(File f : file){
                        File newFile = new File(targetFile,f.getName());
                        copyFile(f,newFile);
                }
        }
        //复制具体文件
        private static void copyFile(File source, File target) {
                FileInputStream fis = null;
                FileOutputStream fos = null;
                try{
                        fis = new FileInputStream(source);
                        fos = new FileOutputStream(target);
                        int len = 0;
                        byte [] bytes = new byte[1024];
                        while((len = fis.read(bytes))!=-1){
                                fos.write(bytes, 0, len);
                        }
                       
                }
                catch(Exception e){
                        e.printStackTrace();
                        throw new RuntimeException("复制失败");
                }finally{
                        try{
                                if(fos!=null)
                                        fos.close();
                        }catch(Exception e){
                                e.printStackTrace();
                        }finally{
                                try{
                                        if(fis!=null)
                                                fis.close();
                                }catch(Exception e){
                                        e.printStackTrace();
                                }
                        }
                }
        }

}

6 个回复

倒序浏览
顶lz!

我也遇到了同样的问题~
每当传递参数是根目录的时候,就会遇到空指针异常~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


非根目录不会产生这个问题
回复 使用道具 举报
在我这可以,当然你的程序中指定的源文件夹中不能有文件夹,
回复 使用道具 举报
月光海 发表于 2014-6-16 21:22
在我这可以,当然你的程序中指定的源文件夹中不能有文件夹,

是这么个故事! 十分感谢!  那为何有文件夹就会报异常呢?
回复 使用道具 举报
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

public class Demo4 {
        public static void main(String[] args) throws IOException {
                File src=getFile();
                File dest= getFile();
                fuzhiFile(src,dest);
               
        }

        private static void fuzhiFile(File src,File dest) throws IOException {
                File newDir = new File(dest,src.getName());
                newDir.mkdir();
                File[] file = src.listFiles();
               
                for (File fi2 : file) {
                        if (fi2.isFile()) {
                                FileInputStream fs = new FileInputStream(fi2);
                                FileOutputStream fos= new FileOutputStream(new File(newDir,fi2.getName()));
                                int a ;
                                byte[] b = new byte[1024];
                                while((a=fs.read(b))!= -1){
                                        fos.write(b,0,a);
                                }
                                fs.close();
                                fos.close();
                               
                               
                        }else{
                                fuzhiFile(fi2,newDir);
                        }
                       
                }
        }

        public static File getFile() {
                Scanner sc = new Scanner(System.in);
                System.out.println("输入要删除的文件夹");
                while (true) {
                        String string = sc.nextLine();
                        File file = new File(string);
                        if (!file.exists()) {
                                System.out.println("您输入文件夹不存在 ,请从新输入");
                        } else if (file.isFile()) {
                                System.out.println("您输入的不是文件夹,请从新输入");

                        } else {
                                return file;
                        }
                }
        }
}
这个是我自己写的 你看看
回复 使用道具 举报
因为在你删除文件夹的那个方法中没有采用递归对list出来的文件对象进行判断,如果一个文件夹对象被你当做文件对象进行复制,必然是会失败的,你可以在网上搜一下复制文件夹的代码,要想复制文件夹是必然要用到递归的
回复 使用道具 举报
黑子 中级黑马 2014-6-16 22:00:16
7#
月光海 发表于 2014-6-16 21:46
因为在你删除文件夹的那个方法中没有采用递归对list出来的文件对象进行判断,如果一个文件夹对象被你当做文 ...

对对对,健壮性判断!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马