• Java中实现复制文件或文件夹


       拷贝一个文件的算法比较简单,当然,可以对它进行优化,比如使用缓冲流,提高读写数据的效率等。但是在复制文件夹时,则需要利用Flie类在目标文件夹中创建相应的目录,并且使用递归方法。

    [java] view plaincopyprint?
    import java.io.*;  
    /** 
     * 复制文件夹或文件夹 
     */  
    public class CopyDirectory {  
        // 源文件夹   
        static String url1 = "f:/photos";  
        // 目标文件夹   
        static String url2 = "d:/tempPhotos";  
        public static void main(String args[]) throws IOException {  
            // 创建目标文件夹   
            (new File(url2)).mkdirs();  
            // 获取源文件夹当前下的文件或目录   
            File[] file = (new File(url1)).listFiles();  
            for (int i = 0; i < file.length; i++) {  
                if (file[i].isFile()) {  
                    // 复制文件   
                    copyFile(file[i],new File(url2+file[i].getName()));  
                }  
                if (file[i].isDirectory()) {  
                    // 复制目录   
                    String sourceDir=url1+File.separator+file[i].getName();  
                    String targetDir=url2+File.separator+file[i].getName();  
                    copyDirectiory(sourceDir, targetDir);  
                }  
            }  
        }  
    // 复制文件   
    public static void copyFile(File sourceFile,File targetFile)   
    throws IOException{  
            // 新建文件输入流并对它进行缓冲   
            FileInputStream input = new FileInputStream(sourceFile);  
            BufferedInputStream inBuff=new BufferedInputStream(input);  
      
            // 新建文件输出流并对它进行缓冲   
            FileOutputStream output = new FileOutputStream(targetFile);  
            BufferedOutputStream outBuff=new BufferedOutputStream(output);  
              
            // 缓冲数组   
            byte[] b = new byte[1024 * 5];  
            int len;  
            while ((len =inBuff.read(b)) != -1) {  
                outBuff.write(b, 0, len);  
            }  
            // 刷新此缓冲的输出流   
            outBuff.flush();  
              
            //关闭流   
            inBuff.close();  
            outBuff.close();  
            output.close();  
            input.close();  
        }  
        // 复制文件夹   
        public static void copyDirectiory(String sourceDir, String targetDir)  
                throws IOException {  
            // 新建目标目录   
            (new File(targetDir)).mkdirs();  
            // 获取源文件夹当前下的文件或目录   
            File[] file = (new File(sourceDir)).listFiles();  
            for (int i = 0; i < file.length; i++) {  
                if (file[i].isFile()) {  
                    // 源文件   
                    File sourceFile=file[i];  
                    // 目标文件   
                   File targetFile=new   
    File(new File(targetDir).getAbsolutePath()  
    +File.separator+file[i].getName());  
                    copyFile(sourceFile,targetFile);  
                }  
                if (file[i].isDirectory()) {  
                    // 准备复制的源文件夹   
                    String dir1=sourceDir + "/" + file[i].getName();  
                    // 准备复制的目标文件夹   
                    String dir2=targetDir + "/"+ file[i].getName();  
                    copyDirectiory(dir1, dir2);  
                }  
            }  
        }  
    }  
  • 相关阅读:
    基于Acer安装双系统。
    js
    “su: cannot set user id: Resource temporarily unavailable”处理及limits.conf说明
    Oracle关于内存参数及大页设置的相关概念和设置之hugepage概念和配置
    Configure NGINX with Exchange 2010, 2013 and 2016 (including RPC / Outlook Anywhere access)
    基于zabbix_agent对主机进程监控的脚本及配置说明
    Zabbix基于CX_ORACLE对Oracle数据库的监控配置
    修改oracle数据库SGA和PGA大小
    使用zabbix监控oracle数据库
    Oracle DG切换
  • 原文地址:https://www.cnblogs.com/huidaoli/p/3209840.html
Copyright © 2020-2023  润新知