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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小歪 中级黑马   /  2014-5-12 22:50  /  1703 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                由于本人磁盘中文件过大,所以只是只是指定了两个文件目录来实现,不会影响其功能,但是出现了异常:                     


       希望大神能帮我找出错误,感觉基本思路是没错的,不知道这个异常是怎么产生的,大神帮忙看看,代码如下:
  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;

  5. public class Drive_Copy{
  6.         public static void main(String args[])throws IOException
  7.         {
  8.                 File yf=new File("D:"+File.separator+"JSD1310-2");
  9.                 File mf=new File("F:"+File.separator+"123");

  10.                 copy(yf,mf); //传递原文件和目标文件
  11.         }
  12.        
  13.         public static void copy(File yf,File mf)throws IOException
  14.         {
  15.                 if(yf!=null){
  16.                         mf=new File(mf.getPath()+yf.getPath().substring(2));                //目标路径
  17.                         System.out.println(mf.getPath());
  18.                         if(mf.isDirectory()){  //判断当前是否是目录
  19.                                
  20.                                
  21.                                 if(!mf.exists())
  22.                                 {
  23.                                         mf.mkdir();
  24.                                 }
  25.                                 File f[]=yf.listFiles(); //列出全部目录
  26.                                 if(f!=null){                //排除无法列出的目录文件,例如:Windows系统文件
  27.                                         for(int i=0;i<f.length;i++)
  28.                                         {
  29.                                                 copy(f[i],mf);
  30.                                         }
  31.                                 }
  32.                         }
  33.                         else{                                //不是目录,就开始复制(读写)文件
  34.                                 System.out.println("123");
  35.                                 FileInputStream fis=new FileInputStream(yf);
  36.                                 FileOutputStream fos=new FileOutputStream(mf);
  37.                                 byte[] temp=new byte[1024];
  38.                                 int len=0;
  39.                                 while((len=fis.read(temp))!=-1)
  40.                                 {
  41.                                         fos.write(temp,0,len);
  42.                                 }
  43.                                 fis.close();
  44.                                 fos.close();
  45.                         }
  46.                 }
  47.         }
  48.        
  49. }
复制代码



点评

用来存储文件的那个文件夹没有创建  发表于 2014-5-13 15:11

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

6 个回复

倒序浏览
楼主的代码太混乱了,我只是放了一个输出语句在22行,结果就执行不到。就再没往下看了。。贴上一个更加简练的代码
  1. package day4;
  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileOutputStream;

  7. //复制制定指定文件夹到指定位置
  8. public class CopyFileAndDir {
  9.         public static void main(String[] args) {
  10.                 File srcDir = new File("F:\\其他\\PPT主题\\图片素材");//源文件夹
  11.                 File descDir = new File("F:\\hello2"); //复制后存放的文件夹
  12.        
  13.                 //如果这个文件夹不存在,则创建
  14.                 if(!descDir.exists())
  15.                         descDir.mkdir();
  16.        
  17.                 copy(srcDir,descDir);  //开始copy
  18.         }
  19.         public static void copy(File file,File mudi)
  20.         {
  21.                 File[] files = file.listFiles();//获取制定位置全部列表
  22.                 for (File file2 : files) {
  23.                         if(file2.isDirectory())
  24.                         {
  25.                                 File dir = new File(file2.toString());
  26.                                 File mk = new File(mudi+File.separator+dir.getName());
  27.                                 mk.mkdir();
  28.                                 copy(dir,mk);
  29.                         }else if(file2.isFile())
  30.                         {
  31.                                 String src = file2.getAbsolutePath();
  32.                                 String dec =mudi+File.separator+file2.getName();
  33.                                 copyFile(src,dec);
  34.                         }
  35.                 }
  36.         }
  37.         //复制文件
  38.         public static void copyFile(String fileName,String copyName)
  39.         {
  40.                 File file = new File(fileName);//源文件
  41.                 File copyfile = new File(copyName);//存放位置及文件名
  42.                 BufferedInputStream bis =null;
  43.                 BufferedOutputStream bos = null;
  44.                 try {
  45.                         bis = new BufferedInputStream(new FileInputStream(file));
  46.                         bos = new BufferedOutputStream(new FileOutputStream(copyfile));
  47.                         //这里不用多说了吧
  48.                          byte[] buf = new byte[1024];
  49.                          int len = 0;
  50.                          while((len = bis.read(buf)) > 0)
  51.                          {
  52.                                  bos.write(buf, 0, len);
  53.                          }
  54.                          
  55.                 } catch (Exception e) {
  56.                         System.out.println("读写文件失败");
  57.                 }finally
  58.                 {
  59.                         try {
  60.                                 if(bis != null)
  61.                                 {
  62.                                         bis.close();
  63.                                 }
  64.                         } catch (Exception e2) {
  65.                                 System.out.println("缓冲区读取流关闭失败");
  66.                         }
  67.                         try {
  68.                                 if(bos != null)
  69.                                 {
  70.                                         bos.close();
  71.                                 }
  72.                         } catch (Exception e2) {
  73.                                 System.out.println("缓冲区输出流关闭失败");
  74.                         }
  75.                 }
  76.         }
  77. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
mf.mkdirs();
boolean mkdirs()
          创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
用这个试试看
回复 使用道具 举报
运行了一下,没有问题,建议检查一下该文件是否有访问权限
回复 使用道具 举报
你首先应该使用的mkdirs();
然后就是 不要获取路径 而是获取文件名称就行了
f.getName();而不是f.getPath();
package com.itheima.file;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;



public class Copy{

        public static void main(String args[])throws IOException

        {

                File yf=new File("E:"+File.separator+"qiyi");

                File mf=new File("F:"+File.separator+"123"+File.separator+"haha");
               
                if(!mf.exists())
                        mf.mkdirs();
                System.out.println(yf.getPath());
                System.out.println(mf.getPath());
                System.out.println(mf.isDirectory());
                copy(yf,mf); //传递原文件和目标文件

        }

        

        public static void copy(File yf,File mf)throws IOException

        {

                if(yf!=null){

                        
                        if(mf.isDirectory()){  //判断当前是否是目录

                                


                                File f[]=yf.listFiles(); //列出全部目录

                                if(f!=null){                //排除无法列出的目录文件,例如:Windows系统文件

                                        for(int i=0;i<f.length;i++)

                                        {
                                                if(f[i].isDirectory()){
                                                       
                                                        File mk=new File(mf+File.separator+f[i].getName());

                                                copy(f[i],mf);//复制文件
                                                }else if(f[i].isFile()){
                                                        String src=f[i].getAbsolutePath();
                                                        String dec=mf+File.separator+f[i].getName();
                                                        copyFile(src,dec);
                                                         
                                             
                 
                                                }

                                        }

                                }

                        }

                        else{                              

                                System.out.println("为系统文件,不能复制");
                        }

                }

        }



                private static void copyFile(String src, String dec) {
                        //源文件
                        File srcFile=new File(src);
                        //模板文件
                        File decFile=new File(dec);
                       
                        BufferedInputStream bis=null;
                        BufferedOutputStream bos=null;
                       
                        try{
                        bis=new BufferedInputStream(new FileInputStream(srcFile));
                        bos=new BufferedOutputStream(new FileOutputStream(decFile));
                        //读取文件数据
                        byte[] buf = new byte[1024];
                         
                                                 int len = 0;
                         
                                                while((len = bis.read(buf)) > 0)
                         
                                                {
                         
                                                bos.write(buf, 0, len);
                         
                                                }

                        }catch(IOException e){
                                e.printStackTrace();
                        }finally{
                                if(bis!=null&&bos!=null){
                                        try {
                                                bis.close();
                                                bos.close();
                                        } catch (IOException e) {
                                               
                                                e.printStackTrace();
                                        }
                                }
                        }       
                       
                }

        

}
回复 使用道具 举报
NewDemo 发表于 2014-5-12 23:32
楼主的代码太混乱了,我只是放了一个输出语句在22行,结果就执行不到。就再没往下看了。。贴上一个更加简练 ...

找到问题了,是目标文件在组合路径时出错了!
不过还是谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马