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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天涯追梦 中级黑马   /  2014-5-12 18:26  /  1422 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


需求:把e盘中文件夹aaa中(包含子文件夹)所有.avi文件,全部复制到a文件中,我写了以下代码,为什么不对呀。请高手解答,谢谢!

  1. package day1;

  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileFilter;
  6. import java.io.FileInputStream;
  7. import java.io.FileNotFoundException;
  8. import java.io.FileOutputStream;
  9. import java.io.IOException;

  10. public class CopyAvi {

  11.         public static void main(String[] args) throws IOException {
  12.                 File file = new File("e:\\aaa");
  13.                 // TODO Auto-generated method stub
  14.                 File files = new File("e:\\a");
  15.                
  16.                 FileFilter ff = new FileFilter() {
  17.                        
  18.                         @Override
  19.                         public boolean accept(File pathname) {
  20.                                 // TODO Auto-generated method stub
  21.                                 return pathname.getName().endsWith(".avi");
  22.                         }
  23.                 };
  24.                
  25.                 copyavi(file,files,ff);
  26.                
  27.         }

  28.         private static void copyavi(File file, File files, FileFilter ff) throws IOException {
  29.         File [] fi = file.listFiles();
  30.         for (File fil : fi) {
  31.                 if (fil.isDirectory()) {
  32.                         copyavi(fil,files,ff);
  33.                 }
  34.                 else{
  35.                         if(ff.accept(fil)){
  36.                         FileInputStream fis = new FileInputStream(fil);
  37.                         FileOutputStream fos = new FileOutputStream(files);
  38.                         BufferedInputStream bis = new BufferedInputStream(fis);
  39.                         BufferedOutputStream bos = new BufferedOutputStream(fos);
  40.                         byte buf [] = new byte[1024];
  41.                         int len = 0;
  42.                         while ((len = bis.read(buf)) != -1) {
  43.                                 bos.write(buf);
  44.                                
  45.                         }
  46.                         bis.close();
  47.                         bos.close();}
  48.                 }
  49.         }

  50.                
  51.         }

  52. }
复制代码



4 个回复

倒序浏览
把上面的代码,修改了一下,加上了集合,可是,还是不对呀:(
  1. package day1;

  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileFilter;
  6. import java.io.FileInputStream;
  7. import java.io.FileNotFoundException;
  8. import java.io.FileOutputStream;
  9. import java.io.IOException;
  10. import java.util.ArrayList;
  11. import java.util.List;

  12. public class CopyAvi {

  13.         public static void main(String[] args) throws IOException {
  14.                 File file = new File("e:\\aaa");
  15.                 // TODO Auto-generated method stub
  16.                 File files = new File("e:\\a");
  17.                 if (!files.exists()) {
  18.                         files.mkdirs();
  19.                 }
  20.                 List <File>list = new ArrayList<File>();
  21.                
  22.                 FileFilter ff = new FileFilter() {
  23.                        
  24.                         @Override
  25.                         public boolean accept(File pathname) {
  26.                                 // TODO Auto-generated method stub
  27.                                 return pathname.getName().endsWith(".java");
  28.                         }
  29.                 };
  30. copyavi(file,list,ff);
  31.                
  32.                 for (File file2 : list) {
  33.                         BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file2));
  34.                         BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(files));
  35.                         byte buf [] = new byte[1024];
  36.                         int len = 0;
  37.                         while ((len = bis.read(buf)) != -1) {
  38.                                 bos.write(buf,0,len);
  39.                                
  40.                         }
  41.                         bis.close();
  42.                         bos.close();
  43.                 }
  44.                
  45.        
  46.         }

  47.         private static void copyavi(File file, List list, FileFilter ff) throws IOException {
  48.         File [] fi = file.listFiles();
  49.         for (File fil : fi) {
  50.                 if (fil.isDirectory()) {
  51.                         copyavi(fil,list,ff);
  52.                 }
  53.                 else{
  54.                         if(ff.accept(fil)){
  55.                                 list.add(fil);
  56.                         }
  57.                         }
  58.                 }
  59.                
  60.         }

  61. }
复制代码
回复 使用道具 举报
代码小改了一下,可复制,但是不能原样复制
  1. package day1;

  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileFilter;
  6. import java.io.FileInputStream;
  7. import java.io.FileOutputStream;
  8. import java.io.IOException;
  9. import java.util.ArrayList;
  10. import java.util.List;

  11. public class CopyAvi {

  12.         public static void main(String[] args) throws IOException {
  13.                 File file = new File("e:\\aaa");
  14.                 // TODO Auto-generated method stub
  15.                 File files = new File("e:\\a");
  16.                 if (!files.exists()) {
  17.                         files.mkdirs();
  18.                 }
  19.                 List<File> list = new ArrayList<File>();

  20.                 FileFilter ff = new FileFilter() {

  21.                         @Override
  22.                         public boolean accept(File pathname) {
  23.                                 // TODO Auto-generated method stub
  24.                                 return pathname.getName().endsWith(".avi");
  25.                         }
  26.                 };
  27.                 copyavi(file, list, ff);

  28.                 for (File file2 : list) {
  29.                         BufferedInputStream bis = new BufferedInputStream(
  30.                                         new FileInputStream(file2));
  31.                         BufferedOutputStream bos = new BufferedOutputStream(
  32.                                         new FileOutputStream(files.getAbsolutePath()+File.separator+file2.getName()));//看这里
  33.                         byte buf[] = new byte[1024];
  34.                         int len = 0;
  35.                         while ((len = bis.read(buf)) != -1) {
  36.                                 bos.write(buf, 0, len);

  37.                         }
  38.                         bis.close();
  39.                         bos.close();
  40.                 }

  41.         }

  42.         private static void copyavi(File file, List list, FileFilter ff)
  43.                         throws IOException {
  44.                 File[] fi = file.listFiles();
  45.                 for (File fil : fi) {
  46.                         if (fil.isDirectory()) {
  47.                                 copyavi(fil, list, ff);
  48.                         } else {
  49.                                 if (ff.accept(fil)) {
  50.                                         list.add(fil);
  51.                                 }
  52.                         }
  53.                 }

  54.         }

  55. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
天涯追梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. File files = new File("e:\\a\\");
  2.                 files.mkdir();
复制代码


eles里面开头添加
  1. File fileout=new File(files,fil.getName());
复制代码

修改此行
  1. FileOutputStream fos = new FileOutputStream(fileout);
复制代码

评分

参与人数 1技术分 +1 收起 理由
天涯追梦 + 1 嗯,我最后也是这样改的

查看全部评分

回复 使用道具 举报
总结一下:
需求:在看张孝祥老师的高新技术视频时文件夹太多,看视频需要一个个点开文件夹,所以我想的是把所有文件夹的视频文件集中在一个文件夹中,所以写了以上代码,结果出现了问题。经过一些尝试和上面两位朋友的帮助,成功的完成了需求。
下面是完整代码,与大家分享。
  1. //将指定文件夹中(包含子文件夹的)所有指定类型的文件复制到某一文件夹中

  2. package day1;

  3. import java.io.BufferedInputStream;
  4. import java.io.BufferedOutputStream;
  5. import java.io.File;
  6. import java.io.FileFilter;
  7. import java.io.FileInputStream;
  8. import java.io.FileNotFoundException;
  9. import java.io.FileOutputStream;
  10. import java.io.IOException;
  11. import java.util.ArrayList;
  12. import java.util.List;

  13. public class CopyAvi {

  14.         public static void main(String[] args) throws IOException {
  15.                 File file = new File("G:\\学习视频\\张孝祥2010年贺岁视频:Java高新技术");
  16.                 // TODO Auto-generated method stub
  17.                 File files = new File("G:\\学习视频\\张孝祥2010年贺岁视频:avi");
  18.                 if (!files.exists()) {
  19.                         files.mkdirs();
  20.                 }
  21.                 List <File>list = new ArrayList<File>();
  22.                
  23.                 FileFilter ff = new FileFilter() {
  24.                        
  25.                         @Override
  26.                         public boolean accept(File pathname) {
  27.                                 // TODO Auto-generated method stub
  28.                                 return pathname.getName().endsWith(".avi");
  29.                         }
  30.                 };
  31. copyavi(file,list,ff);
  32.                
  33.                 for (File file2 : list) {
  34.                         String str = file2.getName();
  35.                         BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file2));
  36.                        
  37.                         File fill = new File(files,str);
  38.                         BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(fill));
  39.                         byte buf [] = new byte[1024*1024];
  40.                         int len = 0;
  41.                         while ((len = bis.read(buf)) != -1) {
  42.                                 bos.write(buf,0,len);
  43.                                
  44.                         }
  45.                         bis.close();
  46.                         bos.close();
  47.                 }
  48.                
  49.        
  50.         }

  51.         private static void copyavi(File file, List list, FileFilter ff) throws IOException {
  52.         File [] fi = file.listFiles();
  53.         for (File fil : fi) {
  54.                 if (fil.isDirectory()) {
  55.                         copyavi(fil,list,ff);
  56.                 }
  57.                 else{
  58.                         if(ff.accept(fil)){
  59.                                 list.add(fil);
  60.                         }
  61.                         }
  62.                 }
  63.                
  64.         }

  65. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马