//文件分类----->单机版
/*
把 f:/a文件夹下面的所有文件 都根据后缀名统一放到f:/dd文件夹下面
例如f:/a下面有个txt文件,然后就要在f:/dd文件夹下面建立相应的txt文件夹,然后把txt类型的文件都放到这个文件夹下面
*/
import java.io.*;
import java.util.*;
public class TestFile {
  public static void main(String args[]) {
    long lo =  System.currentTimeMillis();
     TestFile tf = new TestFile();
 tf.creatFolder(new File("f:/a"),"f:/dd"); 
 long lo1 = System.currentTimeMillis();
 System.out.println("总共用了:"+(lo1-lo)/1000+"秒");//打印出花了多少时间
  }//此方法主要用来创建文件夹的
  public void creatFolder(File f1,String sfc) {
    if(f1.isDirectory()) { //判断是不是一个有效的目录
//File f1 = new File("f:/a");
File[] file = f1.listFiles();//用一个file[]数组来装f1下面的文件及文件夹
for(int i =0;i<file.length;i++){
  //System.out.println(file[i].getName());//获取文件的名字
  if(file[i].isDirectory()){
creatFolder(file[i],sfc);
  }else{
  if(!file[i].isHidden()){//判断是否是隐藏文件  如果是,就不复制
  String str[] = file[i].getName().split("\\.");//字符串分割,获取后缀名
  if(str.length>=2){  //判断这个文件有没有后缀名,如果没有,就放在一个固定的文件夹里面
  File fc = new File(sfc+"/"+(str[str.length-1]).toLowerCase());//创建一个文件来存放东西
  fc.mkdirs();
  System.out.println(file[i].getPath());
  //调用复制文件的方法copyFile()
  this.copyFile( new File(file[i].getPath()),new File(sfc+"/"+(str[str.length-1]).toLowerCase()+"/"+file[i].getName()));
  }else{
  File fc = new File(sfc+"/else");//创建一个文件来存放东西
  fc.mkdirs();
  System.out.println(file[i].getPath());
  //调用复制文件的方法copyFile()
  this.copyFile( new File(file[i].getPath()),new File(sfc+"/else/"+file[i].getName()));
  }
  }
  }
}
}else{
System.out.println("不是有效的目录,请重新输入!!!");
}
  }//把文件复制到目标文件夹
  public void copyFile(File ff1,File ff2) {
      //开始从ff1去读取数据:
      
      //  File ff1 = new File(file[i].getPath());
      BufferedInputStream bffis = null;
  BufferedOutputStream bffos = null;
  try{
bffis = new BufferedInputStream(new FileInputStream(ff1));//创建BufferedInputStream对象来读取文件中的数据

// File ff2 = new File("f:/b/"+(str[str.length-1]).toLowerCase()+"/"+file[i].getName());
        bffos = new BufferedOutputStream(new FileOutputStream(ff2));//创建BufferedInputStream对象来写入数据 byte[] br = new byte[1024*20];//创建一个数组来接收读取到的东西,
//开始读取
        int lenbff = 0;
        while((lenbff = bffis.read(br)) !=-1){        
//System.out.println(br.length);
bffos.write(br,0,br.length);//一边读取,一边就写入指定的文件内。
}
  }catch(FileNotFoundException e){
      System.out.println("文件没有找到!!");
  e.printStackTrace();
  }catch(IOException e1){
  e1.printStackTrace();
  }finally{
     //关闭资源
 try{
 bffos.close();
     bffis.close();
 }catch(IOException e2){
   e2.printStackTrace();
   }   
  }     
  }
}