node 复制文件

本文介绍Node.js中复制小文件和大文件的方法,包括使用fs模块的writeFileSync和readFileSync,以及使用文件流复制单个文件和目录。特别强调了在复制目录时需要考虑目录是否存在,并提供了相应的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. node 复制小文件


需要引用模块 require( 'fs' );


使用 writeFileSync 和 readFileSync 复制小文件,大文件时会拖垮内存,不建议使用。


代码

var fs = require( 'fs' );

function copyfile(src,dir)
{
    fs.writeFileSync(dir,fs.readFileSync(src));
}


copyfile( 'D:\\from\\config.json', 'D:\\log\\dd.json');

//src 源文件的路径。 dir 复制到哪里的路径,后边的文件名称就是复制完后文件的名称。

//注意点: dir 必须要带文件名称和文件类型,测试时 以为 node 会自动使用复制文件的名称,dir 就只给一个路径,一直没有成功。


2. node 使用文件流的方式复制 文件


var fs = require( 'fs' ),
    stat = fs.stat;
var copy = function( _src, _dst ){
    // 读取目录中的所有文件/目录


            var  readable, writable;
            stat( _src, function( err, st ){
                if( err ){
                    throw err;
                }
                // 判断是否为文件
                if( st.isFile() ){
                    // 创建读取流
                    readable = fs.createReadStream( _src );
                    // 创建写入流
                    writable = fs.createWriteStream( _dst );
                    // 通过管道来传输流
                    readable.pipe( writable );
                }
              
            });


};


// 复制单个文件
copy( 'D:\\from\\config.json', 'D:\\log\\dd.json');

3. 使用文件流方式复制目录

var fs = require( 'fs' ),
    stat = fs.stat;


/*
 * 复制目录中的所有文件包括子目录
 * @param{ String } 需要复制的目录
 * @param{ String } 复制到指定的目录
 */
var copy = function( src, dst ){
    // 读取目录中的所有文件/目录
    fs.readdir( src, function( err, paths ){
        if( err ){
            throw err;
        }
        paths.forEach(function( path ){
            var _src = src + '/' + path,
                _dst = dst + '/' + path,
                readable, writable;
            stat( _src, function( err, st ){
                if( err ){
                    throw err;
                }
                // 判断是否为文件
                if( st.isFile() ){
                    // 创建读取流
                    readable = fs.createReadStream( _src );
                    // 创建写入流
                    writable = fs.createWriteStream( _dst );
                    // 通过管道来传输流
                    readable.pipe( writable );
                }
                // 如果是目录则递归调用自身
                else if( st.isDirectory() ){
                    exists( _src, _dst, copy );
                }
            });
        });
    });
};
// 在复制目录前需要判断该目录是否存在,不存在需要先创建目录
var exists = function( src, dst, callback ){
    fs.exists( dst, function( exists ){
        // 已存在
        if( exists ){
            callback( src, dst );
        }
        // 不存在
        else{
            fs.mkdir( dst, function(){
                callback( src, dst );
            });
        }
    });
};
// 复制目录
exists( 'D:\\from', 'D:\\log', copy );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值