xingbofeng / xingbofeng.github.io

counterxing的博客
https://xingbofeng.github.io
175 stars 18 forks source link

node fs #30

Open xingbofeng opened 6 years ago

xingbofeng commented 6 years ago

fs提供文件I/O,是标准POSIX函数的简单封装,提供文件和目录相关操作,所有的方法都有异步和同步的形式。对于异步方法,其返回的实例也继承自EventEmitter,可以组合回调和EventEmmiter的方法结合使用。

读取文件

同步读取

const fs = require('fs');

// 直接同步读取文件的方式

try {
  const data = fs.readFileSync(__dirname + '/hello.txt', 'utf-8');
  console.log(data);
} catch(err) {
  console.error('readFileSync error: ' + err.message);
}

异步读取

异步读取采用回调的方式来进行:

const fs = require('fs');

// 异步读取文件的方式

fs.readFile(__dirname + '/hello.txt', 'utf-8', (err, data) => {
  if (err) {
    return console.error('readFile error: ' + err.message);
  }
  return console.log(data);
});

通过创建流的方式读取

通过fs.createReadStream()创建可读的流,监听data事件读取每一个chunk数据,最后组合数据。

const fs = require('fs');
const readableStream = fs.createReadStream(__dirname + '/hello.txt', 'utf-8');

let data = '';

readableStream.on('data', (chunk) => {
  data += chunk;
});

readableStream.on('end', () => {
  console.log(data);
});

readableStream.on('error', (err) => {
  console.error('readableStream error: ' + err.message);
});

写入文件

异步写入

const fs = require('fs');

fs.writeFile(__dirname + '/hello2.txt', 'hello world 2', 'utf8', (err) => {
  if (err) {
    console.error('writeFile error: ' + err.message);
  }
});

同步写入

const fs = require('fs');

try {
  fs.writeFileSync(__dirname + '/hello2.txt', 'hello world 2', 'utf8');
} catch (err) {
  console.error('writeFile error: ' + err.message);
}

通过流的方式写入

通过fs.createWriteStream()创建可写的流,通过writeableStream.write()写入数据。

const fs = require('fs');

const writeableStream = fs.createWriteStream(__dirname + '/hello3.txt', 'utf-8');

writeableStream.write('hello world 3', 'utf-8', (err, data) => {
  if (err) {
    console.error('write error: ' + err.message);
  }
});

writeableStream.on('close', () => {
  console.log('writeableStream is closed!');
});

writeableStream.end();