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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

看完一个视频还要换一个文件夹再打开  受不了,是强迫症么:L

于是乎写了个把这些视频放一个文件夹的代码,顺便复习下IO和多线程还有集合
  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.FileOutputStream;
  4. import java.util.ArrayList;

  5. public class CopyFile {
  6.        
  7.         public static void main(String[] args) {

  8.                 //需要复制的文件夹中的文件所在目录
  9.                 File f=new File("E:\\BaiduYunDownload");
  10.                
  11.                 File[] fs=f.listFiles();
  12.                 ArrayList<File> need=new ArrayList<File>();
  13.                
  14.                 for(int i=0;i<fs.length;i++){
  15.                         if(fs[i].isDirectory()){
  16.                                 need.addAll(getInFile(fs[i]));
  17.                         }
  18.                 }
  19.                
  20.                
  21.                 //输出文件夹的目录
  22.                 File gaoxinFile=new File("E:\\BaiduYunDownload\\高新技术部分");
  23.                
  24.                 try {
  25.                         if(!gaoxinFile.exists())
  26.                                 gaoxinFile.mkdir();
  27.                 } catch (Exception e) {
  28.                         e.printStackTrace();
  29.                 }
  30.                
  31.                 //单线程复制文件
  32.                 /*
  33.                 for(File e:need){
  34.                         try {
  35.                                 copyFile(e, new File(gaoxinFile, e.getName()));
  36.                         } catch (Exception e1) {
  37.                                 e1.printStackTrace();
  38.                         }
  39.                 }*/
  40.                
  41.                 //多线程复制文件
  42.                 for(File e:need){
  43.                         Copy2 c=new Copy2(e,new File(gaoxinFile, e.getName()));
  44.                         new Thread(c).start();
  45.                 }
  46.         }
  47.        
  48.         //复制文件
  49.         public static void copyFile(File inFile,File outFile) throws Exception{
  50.                
  51.                 if(outFile.exists()){
  52.                         System.err.println(outFile.getName()+"\t\t\t已存在");
  53.                         return;
  54.                 }
  55.                
  56.                 FileInputStream in=new FileInputStream(inFile);
  57.                 FileOutputStream out=new FileOutputStream(outFile);
  58.                
  59.                 byte[] b=new byte[1024];
  60.                 int temp=0;
  61.                 while((temp=in.read(b))!=-1){
  62.                         out.write(b);
  63.                 }
  64.                 out.flush();
  65.                 System.out.println(outFile.getName()+"\t\t成功");
  66.         }
  67.        
  68.         //获取文件夹中的所有文件,返回文件集合
  69.         public static ArrayList<File> getInFile(File f){
  70.                 ArrayList<File> inFiles=new ArrayList<File>();
  71.                 File[]        fs=f.listFiles();
  72.                 for(int i=0;i<fs.length;i++){
  73.                         //添加以avi结尾的文件
  74.                         if(fs[i].isFile() && fs[i].getName().endsWith("avi")){
  75.                                 inFiles.add(fs[i]);
  76.                         }
  77.                         else {
  78.                                 try{inFiles.addAll(getInFile(fs[i]));}
  79.                                 catch (Exception e) {
  80.                                 }
  81.                         }
  82.                 }
  83.                 return inFiles;
  84.         }
  85. }

  86. //多线程第二种方式:实现Runnable接口
  87. class Copy2 implements Runnable{

  88.         private File in,out;
  89.        
  90.         public Copy2(File in,File out) {
  91.                 this.in=in;
  92.                 this.out=out;
  93.         }
  94.         @Override
  95.         public void run() {
  96.                 try {
  97.                         //System.out.println(Thread.currentThread().getName()+"---start");
  98.                         CopyFile.copyFile(in, out);
  99.                 } catch (Exception e) {
  100.                         e.printStackTrace();
  101.                 }finally{
  102.                         //System.out.println(Thread.currentThread().getName()+"---end");
  103.                 }
  104.         }
  105. }
复制代码




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马