黑马程序员技术交流社区

标题: 一道练习题 [打印本页]

作者: 张聪珉    时间: 2013-8-22 11:10
标题: 一道练习题
本帖最后由 张聪珉 于 2013-8-23 13:39 编辑

复制一个带内容的文件夹到某个盘符(假设E盘)根目录下,以下是我写的代码,大家帮忙看下我这个做法有哪些地方不妥,还有注释那部分我填字符串“E:\\”报异常啊,如果换成“E:\\ java”它就会创建一个java的文件,我郁闷啊。。。。。
  1. import java.io.BufferedInputStream;
  2. import java.io.BufferedOutputStream;
  3. import java.io.BufferedWriter;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.io.OutputStream;
  9. import java.util.ArrayList;
  10. import java.util.List;





  11. public class Copyfile {

  12.         private static String f;

  13.         /**
  14.          * @param args         
  15.          */
  16.         public static void main(String[] args) throws IOException{

  17.                 File dir=new File("D:\\Java0806");
  18.                 List<File> li=new ArrayList<File>();

  19.                 fileToList(dir,li);
  20.                
  21.                 File file=new File();//这里我应该怎么填,才能复制到某个盘符或者文件夹里???????
  22.                 writeToFile(li, file);
  23.         }

  24.         private static void writeToFile(List<File> li, File file) throws IOException {
  25.                 // TODO Auto-generated method stub
  26.                 BufferedOutputStream bufo =  null;
  27.                 BufferedInputStream bufi=null;
  28.                 try {
  29.                         bufo=new BufferedOutputStream(new FileOutputStream(file));
  30.                         
  31.                         for(File f : li){
  32.                                 bufi=new BufferedInputStream(new FileInputStream(f));
  33.                                 byte[] b = new byte[1024];
  34.                                 bufi.read(b);
  35.                                 bufo.write(b, 0, b.length);
  36.                         }
  37.                 } catch (IOException e) {
  38.                         // TODO: handle exception
  39.                         throw e;
  40.                 } finally{
  41.                         try{
  42.                                 if(bufo!=null)
  43.                                         bufo.close();
  44.                         }
  45.                         catch (IOException e){
  46.                                 throw e;
  47.                         }
  48.                         try{
  49.                                 if(bufi!=null)
  50.                                         bufi.close();
  51.                         }
  52.                         catch (IOException e){
  53.                                 throw e;
  54.                         }
  55.                 }
  56.                
  57.                
  58.         }

  59.         private static void fileToList(File dir, List<File> li) {
  60.                 // TODO Auto-generated method stub
  61.                 File[] files = dir.listFiles();
  62.                 for(File file:files){
  63.                         if(file.isFile())
  64.                                 li.add(file);
  65.                         else
  66.                                 fileToList(file,li);
  67.                 }
  68.                

  69.                
  70.         }

  71. }
复制代码

作者: gudao20080    时间: 2013-8-22 13:41
你的程序不能达到复制文件夹的效果:
1.你没有获取要复制的文件夹里的文件和名称和文件夹的名称
2。fileToList(File dir, List<File> li)这个函数没有返回值,你获取到了文件,但是不能用
3.判断 判断目标文件目录是否存在,并进行处理

作者: 小冰块    时间: 2013-8-22 19:00
我直接写d:\\没有问题,可以拷过去,但是不会创建你要拷贝的那个文件夹,只会把你要拷贝的文件夹下的所有内容都放到根目录里面。。。
我把我写的代码贴给你吧,你可以看
  1. import java.io.*;

  2. public class copyDir {
  3.         public static void main(String[] args) throws IOException {
  4.                 File file = new File("c:\\program files\\java");
  5.                 File file2 = new File("d:\\");
  6.                 if (!(file.exists() && file.isDirectory()))
  7.                 {
  8.                         System.out.println("该目录不存在");
  9.                         return;
  10.                 }
  11.                
  12.                 copyDir(file,file2);
  13.                 System.out.println("Dirctor Copy is complied!");
  14.         }
  15.        
  16.         public static void copyDir(File file,File file2) throws IOException{
  17.                 File[] files = file.listFiles();
  18.                 //遍历目标文件夹
  19.                 for (File f : files)
  20.                 {
  21.                         System.out.println(f.getName());
  22.                         //如果是子文件夹,则递归调用本方法
  23.                         if (f.isDirectory())
  24.                         {
  25.                                 //在目标文件夹下建立同名子目录
  26.                                 String path = file2.getAbsolutePath();
  27.                                 File file3 = new File(path,f.getName());
  28.                                 System.out.println("mkdir :"+file3.getName()+" is "+file3.mkdirs());               
  29.                                 copyDir(f,file3);
  30.                         }
  31.                         //如果不是文件夹,而是文件,则创建新同名文件,然后进行复制
  32.                         else
  33.                         {
  34.                                 System.out.println("copying...");
  35.                                 String name = f.getName();
  36.                                 File f2 = new File(file2,name);
  37.                                 copyFile(f,f2);
  38.                         }
  39.                        
  40.                 }
  41.        
  42.         }
  43.         //拷贝文件的方法
  44.         public static void copyFile(File f1, File f2) throws IOException{
  45.                 BufferedReader bufr =
  46.                                 new BufferedReader(new InputStreamReader(new FileInputStream(f1)));
  47.                
  48.                 BufferedWriter bufw =
  49.                                 new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f2)));
  50.                
  51.                 String line = null;
  52.                 while((line = bufr.readLine())!=null)
  53.                 {
  54.                         bufw.write(line);
  55.                 }
  56.                 bufw.close();
  57.                 bufr.close();               
  58.         }
  59. }
复制代码
一下。





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