webfansplz / article

record and share
704 stars 213 forks source link

[Node.js 入门系列] 文件操作系统 fs 模块 #24

Open webfansplz opened 4 years ago

webfansplz commented 4 years ago

文件操作系统 fs 模块

在一些场景下,我们需要对文件进行 增删改查等操作, Nodejs 提供了 fs 模块,让我们对文件进行操作.

下面我们来介绍几个经常用的 API

1. 读取文件

const fs = require("fs");
const fs = require("fs");

// 异步读取
fs.readFile("./index.txt", "utf8", (err, data) => {
  console.log(data); //  Hello Nodejs
});

// 同步读取
const data = fs.readFileSync("./index.txt", "utf8");

console.log(data); //  Hello Nodejs

// 创建读取流
const stream = fs.createReadStream("./index.txt", "utf8");

// 这里可以看到fs.createReadStream用到了我们前面介绍的events eventEmitter.on() 方法来监听事件
stream.on("data", data => {
  console.log(data); // Hello Nodejs
});

2. 写入/修改文件

写入文件时,如果文件不存在,则会创建并写入,如果文件存在,会覆盖文件内容.

const fs = require("fs");
// 异步写入
fs.writeFile("./write.txt", "Hello Nodejs", "utf8", err => {
  if (err) throw err;
});
// 同步写入
fs.writeFileSync("./writeSync.txt", "Hello Nodejs");
// 文件流写入
const ws = fs.createWriteStream("./writeStream.txt", "utf8");
ws.write("Hello Nodejs");
ws.end();

3. 删除文件/文件夹

// 异步删除文件
fs.unlink("./delete.txt", err => {
  if (err) throw err;
});

// 同步删除文件
fs.unlinkSync("./deleteSync.txt");
// 异步删除文件夹
fs.rmdir("./rmdir", err => {
  if (err) throw err;
});

// 同步删除文件夹
fs.rmdirSync("./rmdirSync");

4. 创建文件夹

// 异步创建文件夹
fs.mkdir("./mkdir", err => {
  if (err) throw err;
});

// 同步创建文件夹
fs.mkdirSync("./mkdirSync");

5. 重命名文件/文件夹

const fs = require("fs");

// 异步重命名文件
fs.rename("./rename.txt", "./rename-r.txt", err => {
  if (err) throw err;
});

// 同步重命名文件夹
fs.renameSync("./renameSync", "./renameSync-r");

6. 复制文件/文件夹

const fs = require("fs");

// 异步复制文件
fs.copyFile("./copy.txt", "./copy-c.txt", (err, copyFiles) => {
  if (err) throw err;
});

// 同步复制文件夹
fs.copyFileSync("./null", "null-c");

7. 文件夹状态- 文件/文件夹

const fs = require("fs");

// 异步获取文件状态
fs.stat("./dir", (err, stats) => {
  if (err) throw err;
  // 是否是文件类型
  console.log(stats.isFile()); // false
  // 是否是文件夹类型
  console.log(stats.isDirectory()); // true
});

// 同步获取文件状态
const stats = fs.statSync("./stats.txt");

// 是否是文件类型
console.log(stats.isFile()); // true
// 是否是文件夹类型
console.log(stats.isDirectory()); // false

在一些复杂的操作场景下,fs 模块要做很多判断与处理 ,这里我推荐大家使用 fs-extra,它在 fs 的基础上扩展了一些方法,让一些复杂操作更简便!

上一节: [Node.js 入门系列] 本地路径 path 模块

下一节: [Node.js 入门系列] 全局对象 process 进程