总结一下:
需求:在看张孝祥老师的高新技术视频时文件夹太多,看视频需要一个个点开文件夹,所以我想的是把所有文件夹的视频文件集中在一个文件夹中,所以写了以上代码,结果出现了问题。经过一些尝试和上面两位朋友的帮助,成功的完成了需求。
下面是完整代码,与大家分享。
- //将指定文件夹中(包含子文件夹的)所有指定类型的文件复制到某一文件夹中
- package day1;
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileFilter;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- public class CopyAvi {
- public static void main(String[] args) throws IOException {
- File file = new File("G:\\学习视频\\张孝祥2010年贺岁视频:Java高新技术");
- // TODO Auto-generated method stub
- File files = new File("G:\\学习视频\\张孝祥2010年贺岁视频:avi");
- if (!files.exists()) {
- files.mkdirs();
- }
- List <File>list = new ArrayList<File>();
-
- FileFilter ff = new FileFilter() {
-
- @Override
- public boolean accept(File pathname) {
- // TODO Auto-generated method stub
- return pathname.getName().endsWith(".avi");
- }
- };
- copyavi(file,list,ff);
-
- for (File file2 : list) {
- String str = file2.getName();
- BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file2));
-
- File fill = new File(files,str);
- BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(fill));
- byte buf [] = new byte[1024*1024];
- int len = 0;
- while ((len = bis.read(buf)) != -1) {
- bos.write(buf,0,len);
-
- }
- bis.close();
- bos.close();
- }
-
-
- }
- private static void copyavi(File file, List list, FileFilter ff) throws IOException {
- File [] fi = file.listFiles();
- for (File fil : fi) {
- if (fil.isDirectory()) {
- copyavi(fil,list,ff);
- }
- else{
- if(ff.accept(fil)){
- list.add(fil);
- }
- }
- }
-
- }
- }
复制代码 |