与文件系统进行交互的核心模块
文件操作方法:
- fs.readFileSync() 同步读取 - 返回文件内容
- fs.readFile() 异步读取 - 该方法没有返回值,回调函数在读取文件成功后执行
-
fs.writeFileSync():同步写入,覆盖原内容
-
fs.writeFile():异步写入
-
fs.appendFileSync(): 同步追加写入,拼接
-
fs.appendFile(): 异步
- fs.copyFileSync() : 同步拷贝
- fs.copyFile(): 异步拷贝
- fs.mkdirSync(): 同步创建目录,没有返回值
- fs.mkdir():异步创建目录,第二个参数为回调函数
文件流式读取,写入:
- fs.createReadStream()
- fs.createWriteStream()
参数:
同步操作有返回值:文件读有2个参数(1,3),文件写和追加写有三个参数
- 第一个参数为写入文件的路径或文件描述符
- 第二个参数为写入的数据,类型为 String 或 Buffer
- 第三个参数为 options,
- 默认值为 null,
- 编码encoding
(默认为 utf8)、'ascii'、'base64' - 标识位flag(默认为 a):
{flag:'r+'} - 权限位mode(默认为 0o666)
异步操作:没有返回值
- 前三个参数和同步相同
- 最后一个参数为回调函数,函数内有一个参数
err(错误),回调函数在文件追加写入数据成功后执行
例子:
const fs = require("fs");
let buf = fs.readFileSync("1.txt");
let data = fs.readFileSync("1.txt", "utf8");
console.log(buf); // <Buffer 48 65 6c 6c 6f>
console.log(data); // Hello
fs.readFile("1.txt", "utf8", (err, data) => {
if(!err){
console.log(data); // Hello
}
});
fs.writeFileSync("2.txt", "Hello world");
fs.writeFile("2.txt", "Hello world", err => {
if (!err) {
fs.readFile("2.txt", "utf8", (err, data) => {
console.log(data); // Hello world
});
}
});
fs.appendFile("3.txt", " world", err => {
if (!err) {
fs.readFile("3.txt", "utf8", (err, data) => {
console.log(data); // Hello world
});
}
});
fs.mkdirSync("a/b/c")
fs.copyFile("3.txt", "4.txt", () => {
fs.readFile("4.txt", "utf8", (err, data) => {
console.log(data); // Hello world
});
});
fs 和 Buffer的结合
通过流的形式,将一个文件的内容读取到另外一个文件 如果读取文件的时候,第二个参数不传递的话,打印出来的也是Buffer
const inputStream = fs.createReadStream('input.txt'); // 创建可读流
const outputStream = fs.createWriteStream('output.txt'); // 创建可写流
inputStream.pipe(outputStream); // 管道读写