node学习笔记之fs(filesystem)模块

  • Post author:
  • Post category:其他




fs(file system) 文件系统模块

在我的理解里面,这个模块简直算是神奇爆了。

fs模块,一个可以操作文件的模块。

但是,fs模块有一个奇妙的小问题(待补充还有没有模块和fs类似),fs模块相对路径相对的地址为打开命令行的位置,而不是像require一样,以当前文件所在目录为起始路径。

本文后续会在较多地方提及buffer,在这里稍作说明:

Node.js 可以用来处理二进制流数据或者与之进行交互。



fs.readFile(path[, options], callback)

	const fs = require('fs');

	fs.readFile('./index.html', (err, data) => {
   
		if (err) throw err
		console.log(data)
	})

最最最最简单直接的用法,读取文件,err是错误信息,直接抛出就好了,data是读取到文件的信息。

如果没有设置options(比如

{encoding: 'utf8'})

的情况下,会直接返回原始的 buffer。

(下图是打印出的data)

在这里插入图片描述

不过,options有一种骚操作,直接传入的是一个字符串类型;当传入的是字符串的时候,会直接将字符串设置成字符编码类型使用(比如

fs.readFile('./index.html','utf8',()=>{})

,这种情况下会直接把utf8作为字符编码)。

(下图是打印出的utf8编码的data,不要问为什么是乱码,因为txt的字符编码我莫得设置,其实说白了就是编码不统一)

在这里插入图片描述

(下图是打印出的还是utf8编码的data,这次是正常的了)

在这里插入图片描述

下面放着官网的介绍,最主要就是为了…怕你们看完了我写的小白介绍看不懂还得辛辛苦苦翻文档去,所以干脆给你们省个事儿,本人本着用得到才学习的学习方式(别打我),所以暂时就只写了最基本的用法(求求你们真的别打我)。

(没错这下面就是扒的官网介绍)

异步地读取文件的全部内容。

fs.readFile('/etc/passwd', (err, data) => {
    
  if (err) throw err;
  console.log(data);
});

回调会传入两个参数

(err, data)

,其中

data

是文件的内容。

如果没有指定

encoding

,则返回原始的 buffer。

如果

options

是字符串,则它指定字符编码:

fs.readFile('/etc/passwd', 'utf8', callback);



path

是目录时,

fs.readFile()




fs.readFileSync()


的行为是特定于平台的。 在 macOS、Linux 和 Windows 上,将返回错误。 在 FreeBSD 上,将返回目录内容的表示。

// 在 macOS、Linux 和 Windows 上:
fs.readFile('<目录>', (err, data) => {
    
  // => [Error: EISDIR: illegal operation on a directory, read <目录>]
});

// 在 FreeBSD 上:
fs.readFile('<目录>', (err, data) => {
    
  // => null, <data>
});


fs.readFile()

函数会缓冲整个文件。 为了最小化内存成本,尽可能通过

fs.createReadStream()

进行流式传输。



fs.readFileSync(path[, options])

这个是fs.readFile的同步版本说白了,fs.readFileSync的返回值就是读取后的data,当需要捕获错误的时候就直接使用

try catch

进行捕获就好了。

(图片…是没有的,因为数据和上面异步的是一样的,直接上去看吧)



fs.writeFile(path, data[, options], callback)

简单来说就是写入一个文件,第一个参数是文件名,当没有这个文件的时候会创建这样一个文件,但是当文件已经存在的时候就会直接覆盖原文件。

(结合一下上面的readFileSync读取之前的1.txt并写入一个test.txt出来)

const fs = require('fs');

let data = fs.readFileSync('./1.txt', 'utf8');

fs.writeFile('./test.txt', data, 'utf8', (err) => {
   
    if (err) throw new Error(err);
    console.log('写入test.txt成功')
})

(下图就是通过读取1.txt里面的内容,然后写入一个新的test.txt文件)

在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191130114140206.png



版权声明:本文为weixin_44368787原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。