文件读取

Node.js 文件读写

推荐使用 node-fs-extra 来扩展原生的 fs 模块尚未提供的功能,

读取为流

读取文件并将其输出到 stdout 的简单例子。

const fs = require("fs");
const readStream = fs.createReadStream("myfile.txt");
readStream.pipe(process.stdout);

创建一个文件的 sha1 摘要,并将结果回传到 stdout(类似于 shasum):

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

const readStream = fs.createReadStream("myfile.txt");
const hash = crypto.createHash("sha1");
readStream
  .on("data", function (chunk) {
    hash.update(chunk);
  })
  .on("end", function () {
    console.log(hash.digest("hex"));
  });

data 事件是在可读数据流上为每块数据发射的,所以你可以边走边更新每块数据的摘要,最后当数据流结束时,结束事件被发射,这样你就可以输出最终结果。请注意,每次你调用.on() 来注册一个监听器时,它都会返回原始流,所以你可以很容易地连锁方法。在 Node.js 0.10+中,有一个更好的方法来消耗流。Readable 接口使流的工作变得更容易,特别是在创建流和使用流之间你想做其他事情的流。这些较新的 Readable 流是拉流,当你被读取数据时,你会请求数据,而不是让数据推送给你。

const crypto = require("crypto");
const fs = require("fs");
const readStream = fs.createReadStream("myfile.txt");
const hash = crypto.createHash("sha1");

readStream
  .on("readable", function () {
    const chunk;
    while (null !== (chunk = readStream.read())) {
      hash.update(chunk);
    }
  })
  .on("end", function () {
    console.log(hash.digest("hex"));
  });

文本读取

const { promisify } = require("util");
const fs = require("fs");
const readFileAsync = promisify(fs.readFile); // (A)
const filePath = process.argv[2];

readFileAsync(filePath, { encoding: "utf8" })
  .then((text) => {
    console.log("CONTENT:", text);
  })
  .catch((err) => {
    console.log("ERROR:", err);
  });

如果文件不存在的话则会报错,有时候我们需要首先判断文件是否存在:

fs.exists(path, callback);
fs.existsSync(path);

JSON

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

const file = "/tmp/this/path/does/not/exist/file.json";

fs.outputJson(file, { name: "JP" }, (err) => {
  console.log(err); // => null

  fs.readJson(file, (err, data) => {
    if (err) return console.error(err);

    console.log(data.name); // => JP
  });
});

// With Promises:

fs.outputJson(file, { name: "JP" })
  .then(() => fs.readJson(file))
  .then((data) => {
    console.log(data.name); // => JP
  })
  .catch((err) => {
    console.error(err);
  });
function processFile(inputFile) {
  const fs = require("fs"),
    readline = require("readline"),
    instream = fs.createReadStream(inputFile),
    outstream = new (require("stream"))(),
    rl = readline.createInterface(instream, outstream);

  rl.on("line", function (line) {
    console.log(line);
  });

  rl.on("close", function (line) {
    console.log(line);
    console.log("done reading file.");
  });
}

processFile("/path/to/a/input/file.txt");
fs.readFile("input.txt", "utf8", function (err, data) {
  if (err) throw err;

  console.log(data);
});
下一页