fs模块
1.0、参考
1.1、fs模块的作用

fs模块用来对本地文件系统进行操作。

1.2、fs模块的加载
const fs = require('fs');
1.3、fs模块的API

fs模块中提供的方法可以用来执行基本的文件操作,包括读、写、重命名、创建和删除目录以及获取文件元数据等。

fs模块中的方法大多是由标准POSIX函数封装而成。

fs模块中的方法都有同步和异步两个版本。

异步操作的版本都会使用一个回调方法作为最后一个参数。当操作完成的时候,该回调方法会被调用。 而回调方法的第一个参数总是保留为操作时可能出现的异常。 如果操作成功,则第一个参数的值是nullundefined

同步操作的版本的方法名称则是在对应的异步方法之后加上一个Sync作为后缀。 比如异步的rename()方法的同步版本是renameSync()

同步操作方法的返回值,通常在正常执行的返回值是nullundefined,出现错误的时候才不会为nullundefined

1.3.1、fs.readFile(file [, option], callback)
参数类型
file
String:文件路径
Buffer:缓冲区,Buffer的实例
Integer:文件描述符
option
Object:可以有encodingflag两个字段
String:只需要设置一个字段的时候,把对象退化为String
callbackFunction:回掉原型为function(Error error, Buffer data)

读取整个文件。

示例1:

var fs = require('fs');
fs.readFile('readFile.js', function (err, dataBuffer) {
    if (err) {
        throw err;
    }
    console.log(dataBuffer.toString());
});

示例2(按行读取整个文件):

var fs = require('fs');
fs.readFile('./readFileByLine.js', function (err, dataBuffer) {
    var text = dataBuffer.toString();
    var lineTexts = text.split('\n');
    lineTexts.forEach(function (lineText, index, lineTexts) {
        console.log(lineText);
    });
});

示例3(以utf-8编码):

var fs = require('fs');
fs.readFile('./readFileByLine.js', 'utf-8', function (err, dataBuffer) {
    var text = dataBuffer.toString();
    var lineTexts = text.split('\n');
    lineTexts.forEach(function (lineText, index, lineTexts) {
        console.log(lineText);
    });
});
1.3.2、fs.writeFile(file, data [, option], callback)
参数类型
file
String:文件路径
Buffer:缓冲区,Buffer的实例
Integer:文件描述符
dataString | Buffer | Uint8Array
option
Object:可以有encodingmodeflag三个字段
String:只需要设置一个字段的时候,把对象退化为String
callbackFunction:回掉原型为function(Error error)

写文件,无论这个文件原来是否存在。如果原来存在,就会覆盖原来的文件,如果原来不存在,就创建新文件。

示例:

var fs = require('fs');
fs.writeFile('xx.txt', 'Hello World!', function (err) {
    if (err) {
        throw err;
    }
    console.log('success');
});
1.3.3、fs.appendFile(file, data [, option], callback)

以追加的方式写文件。其他地方与fs.writeFile(file, data [, option], callback)完全一样。

1.3.4、fs.readdir(file [, option], callback)
参数类型
file
String:文件夹路径
Buffer:缓冲区,Buffer的实例
option
Object:只有encoding字段
String:只需要设置一个字段的时候,把对象退化为String
callbackFunction:回掉原型为function(Error error, String[] files)

示例1:

var fs = require('fs');
fs.readdir('.', function (err, files) {
    if (err) {
        throw err;
    }
    files.forEach(function (file, index, files) {
        
    });
});

示例2:

var fs = require('fs');
fs.readdir('.', 'utf-8', function (err, files) {
    if (err) {
        throw err;
    }
    files.forEach(function (file, index, files) {
        
    });
});
1.3.5、fs.mkdir(file [, mode], callback)
参数类型
file
String:文件夹路径
Buffer:缓冲区,Buffer的实例
mode
Integer:设置权限(读、写、执行),默认是八进制的0o777。 与bash中的chmod规则一样。
callbackFunction:回掉原型为function(Error error)

注意:要创建份文件夹的父文件夹一定要存在,否则会报错。bash里的mkdir命令可以使用-p参数创建不存在的父文件夹,而这里似乎没有提供这个参数。

示例1:

var fs = require('fs');
fs.mkdir('xxxx', function (err) {
    if (err) {
        console.log(err);
    } else {
        console.log('success');
    }
});

示例2:

var fs = require('fs');
fs.mkdir('xxxx', 0o741, function (err) {
    if (err) {
        console.log(err);
    } else {
        console.log('success');
    }
});
1.3.6、unlink

删除文件或者文件夹。

示例:

var fs = require('fs');
fs.unlink('./xx.js', function (err) {
    if (err) {
        throw err;
    }
    console.log('successfully deleted xx.js');
});