黑马程序员技术交流社区

标题: 文件夹复制 [打印本页]

作者: Emperors    时间: 2014-6-15 02:09
标题: 文件夹复制
本帖最后由 Emperors 于 2014-6-16 21:06 编辑

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class White0222 {
        public static void main(String[] args) throws IOException {
               
//                数据源
                FileReader f = new FileReader("e:\\kankan");
//    目的地
                FileWriter  f2 = new FileWriter("d:\\kankan");
               
                int ch= 0;
               
                while((ch=f.read()) !=-1){
                  f2.write(ch);        
                }
                f.close();
                f2.close();
        }

}
  它打印的结果是:
       Exception in thread "main" java.io.FileNotFoundException: e:\kankan (拒绝访问。)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:146)
        at java.io.FileInputStream.<init>(FileInputStream.java:101)
        at java.io.FileReader.<init>(FileReader.java:58)
        at HashMap.White0222.main(White0222.java:12)     
  想请教一下  为什么是这结果啊
         还有拒绝访问是啥意思啊
作者: 496080891    时间: 2014-6-15 03:32
f2要写入的文件要和f不同名,你的f和f2操作的是同一个文件,怎么复制?f2的文件名改下就行了。
作者: 多一点    时间: 2014-6-15 07:54
  FileReader f = new FileReader("e:\\kankan");你这里传入的这个参数必须是一个具体的文件,不是一个文件夹比如E:\\kankan,txt; 下面的目标文件也是一样
//    目的地
                FileWriter  f2 = new FileWriter("d:\\kankan");
               
                int ch= 0;
作者: 淡淡柠檬茶    时间: 2014-6-15 07:58
496080891 发表于 2014-6-15 03:32
f2要写入的文件要和f不同名,你的f和f2操作的是同一个文件,怎么复制?f2的文件名改下就行了。 ...

了解,逛帖子也能长知识哈
作者: Emperors    时间: 2014-6-15 09:43
496080891 发表于 2014-6-15 03:32
f2要写入的文件要和f不同名,你的f和f2操作的是同一个文件,怎么复制?f2的文件名改下就行了。 ...

谢谢    不过我想复制文件夹啊
作者: Emperors    时间: 2014-6-15 09:45
多一点 发表于 2014-6-15 07:54
FileReader f = new FileReader("e:\\kankan");你这里传入的这个参数必须是一个具体的文件,不是一个文件 ...

谢谢   那我如果连整个文件夹都复制呢 ?代码应该怎么改写啊
作者: weitz    时间: 2014-6-15 09:54
楼主代码不能复制文件夹
作者: wangmin    时间: 2014-6-15 12:41
楼主 看下我的代码能不能复制文件夹

package foldercopy;
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 FolderCopy {
        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                //f1和f2是目录,目录自己改写下
                File f1=new File("D:\\有道翻译");
                File f2=new File("c:\\123");
                copy(f1, f2);
        }
        public static void copy(File file1,File file2){
                File file[]=file1.listFiles();
                if(file2.exists()==false){
                        file2.mkdir();
                }
                for(int i=0;i<file.length;i++){
                        if(file[i].isFile()){
                                copyFile(file[i],new File(file2,file[i].getName()));
                        }
                        else{
                                copy(file[i], new File(file2,file[i].getName()));
                        }
                }
        }
        public static void copyFile(File scr,File des){
                BufferedInputStream bufferedInputStream=null;
                BufferedOutputStream bufferedOutputStream=null;
                try {
                        bufferedInputStream=new BufferedInputStream(new FileInputStream(scr));
                        bufferedOutputStream=new BufferedOutputStream(new FileOutputStream(des));
                        int j=0;
                        byte b[]=new byte[1024*1024];
                        while((j=bufferedInputStream.read(b))!=-1){
                                bufferedOutputStream.write(b, 0, j);
                                bufferedOutputStream.flush();
                        }
                } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }finally{
                        try {
                                bufferedInputStream.close();
                                bufferedOutputStream.close();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }
        }
}

作者: a6217815    时间: 2014-6-15 13:26
File是一个文件类,你只能用来对一个文件进行操作。而你给出的e://kankan  是一个文件夹路径(除非你e盘下有个名为kankan的无后缀文件),因此会报 无法找到文件异常
作者: 496080891    时间: 2014-6-15 13:49
  1. import java.io.BufferedInputStream;
  2. import java.io.BufferedOutputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. public class CopyFile
  7. {
  8.         /**
  9.          * 复制文件夹
  10.          * @throws Exception
  11.          */
  12.         public static void main(String[] args) throws Exception
  13.         {
  14.                 File f = new File("d:\\aa");
  15.                 // 创建文件夹
  16.                 if (!f.exists())
  17.                 {
  18.                     f.mkdirs();         
  19.                 }
  20.                 //获取要复制的文件夹
  21.                 File oldfile = new File("d:\\java0410\\ReName");               
  22.                 File[] lists = oldfile.listFiles();
  23.                 for(File list:lists)
  24.                 {
  25.                         if(list.isFile())
  26.                         {
  27.                                 //构造新文件夹下文件名
  28.                                 String newfilename =
  29.                                                 f.getPath()+"\\"+list.getName();                               
  30.                                 copy(list,newfilename);
  31.                         }
  32.                 }
  33.         }
  34.         //复制文件;
  35.         public static void copy(File file,String newfilename) throws Exception
  36.         {
  37.                 BufferedInputStream in =
  38.                                 new BufferedInputStream(new FileInputStream(file));                               
  39.                 BufferedOutputStream out =
  40.                                 new BufferedOutputStream(new FileOutputStream(newfilename));
  41.                 byte[] buf = new byte[1024];
  42.                 int len = 0;
  43.                 while ((len = in.read(buf))!=-1)
  44.                 {
  45.                         out.write(buf, 0, len);                       
  46.                 }
  47.                 in.close();
  48.                 out.close();
  49.         }
  50. }
复制代码

作者: Emperors    时间: 2014-6-15 14:48
wangmin 发表于 2014-6-15 12:41
楼主 看下我的代码能不能复制文件夹

package foldercopy;

谢谢   我知道了
作者: Alan_Kwan    时间: 2014-6-15 15:20
{:3_46:}看到复制文件夹为什么我想到的是递归
作者: liujie445012100    时间: 2014-6-15 23:21
楼主你需要指定具体的文件
作者: Emperors    时间: 2014-6-16 21:05
liujie445012100 发表于 2014-6-15 23:21
楼主你需要指定具体的文件

哦哦     谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2