zoukankan      html  css  js  c++  java
  • Node复制文件

      本人开发过程中,经常遇到,要去拷贝模板到当前文件夹,经常要去托文件,为了省事,解决这个问题,写了一个node复制文件。

    
    

    // js/app.js:指定确切的文件名。
    // js/*.js:某个目录所有后缀名为js的文件。
    // js/**/*.js:某个目录及其所有子目录中的所有后缀名为js的文件。
    // !js/app.js:除了js/app.js以外的所有文件。
    // *.+(js|css):匹配项目根目录下,所有后缀名为js或css的文件。

    //流 stream   管道 pipe 管道
    //如果想在读取流和写入流的时候做完全的控制,可以使用数据事件。但对于单纯的文件复制来说读取流和写入流可以通过管道来传输数据。
    var fs = require("fs");
    var path = require("path");
    /*
     * 复制目录中的所有文件包括子目录
     * @src param{ String } 需要复制的目录   例 images 或者 ./images/
     * @dst param{ String } 复制到指定的目录    例 images images/
     */
     
    //获取当前目录绝对路径,这里resolve()不传入参数
    var filePath = path.resolve();
    
    var copy = function(src,dst){
    
        //判断文件需要时间,则必须同步
        if(fs.existsSync(src)){
            fs.readdir(src,function(err,files){
                if(err){console.log(err);return;}
                files.forEach(function(filename){
                
                    //url+"/"+filename不能用/直接连接,Unix系统是”/“,Windows系统是”“
                    var url = path.join(src,filename),
                        dest = path.join(dst,filename);
                        console.log(url);
                        console.log(dest);
                    fs.stat(path.join(src,filename),function(err, stats){
                        if (err) throw err;
                        
                         //是文件
                        if(stats.isFile()){
                        
                            //创建读取流
                            readable = fs.createReadStream(url);
                            //创建写入流 
                            writable = fs.createWriteStream(dest,{ encoding: "utf8" });
                            // 通过管道来传输流
                            readable.pipe(writable);
                            
                        //如果是目录
                        }else if(stats.isDirectory()){
                            exists( url, dest, copy );
                        }
                    });
                });
            });
        }else{
            console.log("给定的目录不存,读取不到文件");
            return;
        }
    }
    
    function exists(url,dest,callback){
        fs.exists(dest,function(exists){
            if(exists){
                callback && callback(url,dest);
            }else{
                //第二个参数目录权限 ,默认0777(读写权限)
                fs.mkdir(dest,0777,function(err){
                    if (err) throw err;
                    callback && callback(url,dest);
                });
            }
        });
    }
    exports.copy = copy;
    //copy("./views/","./www/");
    copy("./../jdcase/homeappliances/",filePath);

      

  • 相关阅读:
    Duplicate keys detected: '0'. This may cause an update error.
    better-scroll在移动端绑定click事件失效
    vue-awesome-swiper轮播插件的使用方法及问题。
    可运行的js代码
    CSS3表达式calc( )
    webstorm破解教程
    box-decoration-break属性
    shiro自定义密码校验器
    获取select中option被选中的值
    SpringBoot开发验证码功能
  • 原文地址:https://www.cnblogs.com/pingfan1990/p/4774450.html
Copyright © 2011-2022 走看看