node.js读本地文件

参考博客:https://blog.csdn.net/qq_34803821/article/details/84633944
https://www.jb51.net/article/148582.htm
感谢原作者分享。同时附上 node.js 14.17.3 版本官网文档网址:
https://nodejs.org/dist/latest-v14.x/docs/api/documentation.html

一、异步读取文本文件

'use strict';

var fs = require('fs');
fs.readFile('sample.txt', 'utf-8', function (err, data) {
	 if (err) {
  		  console.log(err);
	 } else {
    		console.log(data);
	}
});

此时,sample.txt文件必须在当前目录下,且文件编码为utf-8。文件也可位于其它路径,此时在第一个参数中一起写上文件路径即可,注意路径中的斜杠要左下右上,例如:“tempPath/sample.txt”。

二、异步读取二进制文件

'use strict';

var fs = require('fs');
fs.readFile('sample.png', function (err, data) {
  if (err) {
     console.log(err);
  } else {
    console.log(data);
    console.log(data.length + ' bytes');
  }
});

当读取二进制文件时,不传入文件编码,回调函数的data参数将返回一个Buffer对象。在Node.js中,Buffer对象就是一个包含零个或任意个字节的数组(注意和Array不同)。

Buffer对象可以和String作转换,例如,把一个Buffer对象转换成String:

// Buffer -> String
var text = data.toString('utf-8');
console.log(text);

或者把一个String转换成Buffer:

// String -> Buffer
var buf = Buffer.from(text, 'utf-8');
console.log(buf);

三、同步读文件

'use strict';

try {
    var data = fs.readFileSync( 'sample.txt',  'utf-8' );
    console.log( data );
} catch ( err ) {
    // 出错了
}

如果出错了,可以用try - catch 捕捉错误进行处理。

四、写文件

'use strict';

var fs = require('fs');
var data = 'Hello, Node.js';
fs.writeFile('output.txt', data, function (err) {
   if (err) {
       console.log(err);
   } else {
     console.log('ok.');
 }
});

writeFile()的参数依次为文件名、数据和回调函数。如果传入的数据是String,默认按UTF-8编码写入文本文件,如果传入的参数是Buffer,则写入的是二进制文件。回调函数由于只关心成功与否,因此只需要一个err参数。

和readFile()类似,writeFile()也有一个同步方法,叫writeFileSync():

'use strict';

var fs = require( 'fs' );
var data = 'Hello, Node.js';
fs.writeFileSync ( 'output.txt',  data );

五、获取文件状态

如果我们要获取文件大小,创建时间等信息,可以使用fs.stat(),它返回一个Stat对象,能告诉我们文件或目录的详细信息:

'use strict';

var fs = require('fs');

fs.stat('sample.txt', function (err, stat) {
  if (err) {
      console.log(err);
  } else {
    // 是否是文件:
    console.log('isFile: ' + stat.isFile());
    // 是否是目录:
    console.log('isDirectory: ' + stat.isDirectory());
    if (stat.isFile()) {
        // 文件大小:
        console.log('size: ' + stat.size);
        // 创建时间, Date对象:
        console.log('birth time: ' + stat.birthtime);
        // 修改时间, Date对象:
        console.log('modified time: ' + stat.mtime);
    }
  }
});

stat()也有一个对应的同步函数statSync(),可以试着改写上述异步代码为同步代码。

六、判断文件或目录是否存在

'use strict';

var fs = require('fs');
fs.exists('/etc/passwd', ( exists ) => {
   console.log( exists ? 'file exists.' : 'file does not exist!');
});

在打开文件前判断一下文件是否存在是非常有用的,可以在出错时给出必要的提示,帮助发现和解决问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值