Node中复制文件的四种方法总结
  # node 实现文件的拷贝和复制
let fs = require( 'fs' ),stat = fs.stat;
let copy = function( src, dst ){
    // 读取目录中的所有文件/目录
    fs.readdir( src, function( err, paths ){
        if( err ){
            throw err;
        }
        paths.forEach(function( path ){
            let _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 );
                }
            });
        });
    });
};
// 在复制目录前需要判断该目录是否存在,不存在需要先创建目录
let exists = function( src, dst, callback ){
    fs.exists( dst, function( exists ){
        // 已存在
        if( exists ){
            callback( src, dst );
        }
        // 不存在
        else{
            fs.mkdir( dst, function(){
                callback( src, dst );
            });
        }
    });
};
/*
 * 复制目录中的所有文件包括子目录
 * @param{ String } 需要复制的目录
 * @param{ String } 复制到指定的目录
 */
exists( './login', './haha', copy );
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# copyFile 方法
注意
注意:Node v8.5.0以后可用,用法如下
fs.copyFile('./src/index.js','./dist/index.js',function(err){
	if(err) console.log('something wrong was happened')
	else console.log('copy file succeed');
}
 1
2
3
4
2
3
4
# readFile、writeFile 方法
fs.readFile('./src/index.js',function(err,data){
	if(err) throw new Error('something wrong was happended');
	fs.writeFile('./dest/index.js',data,function(err){
		if(err) throw new Error('something wrong was happended');
	})
})
createReadStream、read、write 方法
let file = createReadStream('./src/index.js');
let out = createWriteStream('./dist/index.js');
file.on('data',function(data){
	out.write(data)
});
file.on('end',function(){
	out.end();
})
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# pipe 方法
let file = createReadStream('./src/index.js');
let out = createWriteStream('./dist/index.js');
file.pipe(out);
 1
2
3
2
3
上次更新: 2024/01/30, 00:35:17