zoukankan      html  css  js  c++  java
  • 多线程复制一个文件夹下的文件到另一个目录

    多线程复制一个文件夹下的所有文件到另一个目录下:

    package cn.ba.watchFile.downLoadFile;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.ArrayBlockingQueue;
    import java.util.concurrent.BlockingQueue;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.ThreadPoolExecutor;
    import java.util.concurrent.TimeUnit;
    
    /**
     * 多线程下载文件
     * 
     * 多线程读写文件
     * 
     * @author Administrator
     *
     */
    public class MultiThreadDown {
        // 最大线程数
            public static final Integer MAX_THREAD_NUM = 50;
            // 固定线程池
            static ExecutorService pool = Executors.newFixedThreadPool(MAX_THREAD_NUM);
            
        public static void main(String[] args) {
            
            File file1 ;
            /*ReadFile readFile1 = new ReadFile();
            
            pool.execute(readFile1);*/
        
        /*    // 创建等待队列
            BlockingQueue bqueue = new ArrayBlockingQueue(20);
            ThreadPoolExecutor threadpool = new ThreadPoolExecutor(6, 11, 2,
                    TimeUnit.MILLISECONDS, bqueue);
            threadpool.execute(new ReadFile());
             */
            
            ReadFile readFile = new ReadFile();
            new Thread(readFile, "线程1").start();
            new Thread(readFile, "线程2").start();
            new Thread(readFile, "线程3").start();
            new Thread(readFile, "线程4").start();
            new Thread(readFile, "线程5").start();
            new Thread(readFile, "线程6").start();
            new Thread(readFile, "线程7").start();
            new Thread(readFile, "线程8").start();
            new Thread(readFile, "线程9").start();
            new Thread(readFile, "线程10").start();
        }
    }
    
    class ReadFile implements Runnable {
        List<File> filePathsList = new ArrayList<File>();
        int index = 0;
    
        public ReadFile() {
            File f = new File("F:"+File.separator+"zip"+File.separator);
            getFileList(f);
        }
        //文件复制
        private void copyFile(File fromFile,File toFile){
            try {
                FileInputStream in = new FileInputStream(fromFile);
                FileOutputStream os = new FileOutputStream(toFile);
                byte[] b=new byte[1024];
                int n=0;
                while((n=in.read(b))!=-1){
                    os.write(b, 0, n);
                }
                in.close();
                os.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        private void getFileList(File f) {
            File[] filePaths = f.listFiles();
            for (File file : filePaths) {
                if (file.isDirectory()) {
                    getFileList(file);
                }else {
                    if (-1 !=file.getName().lastIndexOf(".zip")) {
                        filePathsList.add(file);
                    }
                }
            }
    
        }
    
        @Override
        public void run() {
            // TODO Auto-generated method stub
            File file=null;
            while(index<filePathsList.size()){
                synchronized (this) {
                    if (index>=filePathsList.size()) {
                        continue;
                    }
                    file=filePathsList.get(index);
                    index++;
                }
                try {
                    String osPath="F:"+File.separator+"zipbck"+File.separator+file.getName();
                    Thread.sleep(30);
    //                FileInputStream is = new FileInputStream(file.getPath());
                    System.out.println("当前使用的线程是:"+Thread.currentThread().getName()+",正在读文件:"+filePathsList.indexOf(file)
                            +"文件名为:"+file.getName()+",列表当前长度:"+filePathsList.size());
                    File file1 = new File(osPath);
                    //复制文件
                    copyFile(file, file1);
                } catch (Exception e) {
                    // TODO: handle exception
                }
            }
    
        }
    
    }
  • 相关阅读:
    Java 期末考试
    Java 方法重载,方法重写(覆盖),继承等细节注意
    Java 方法(变量)修饰符的使用顺序
    java考试易错题大全
    python获取进程id号:
    C语言如何判断单个数字是否溢出:
    VS2017编译错误:#error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version
    VS2017出现不存在从"CString"到"const char*"的适当转换函数
    Python实现将图片以二进制格式保存到MySQL数据库中,以及取出:
    解决springboot 出现异常: java.net.BindException: Address already in use: bind
  • 原文地址:https://www.cnblogs.com/kwzblog/p/8876967.html
Copyright © 2011-2022 走看看