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

node学习笔记之fs模块

  • fs(file system) 文件系统模块
    • fs.readFile(path[, options], callback)
    • fs.readFileSync(path[, options])
    • fs.writeFile(path, data[, options], callback)
    • fs.writeFileSync(path, data[, options])
    • fs.rename(oldPath, newPath, callback)
    • fs.renameSync(oldPath, newPath)
    • fs.readdir(path[, options], callback)
    • fs.readdirSync(path[, options])
    • fs.mkdir(path[, options], callback)
    • fs.mkdirSync(path[, options])
  • 应用

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,这次是正常的了)
在这里插入图片描述
下面放着官网的介绍,最主要就是为了…怕你们看完了我写的小白介绍看不懂还得辛辛苦苦翻文档去,所以干脆给你们省个事儿,本人本着用得到才学习的学习方式(别打我),所以暂时就只写了最基本的用法(求求你们真的别打我)。

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

  • path | | | 文件名或文件描述符。
  • options |
    • encoding | 默认值: null
    • flag 参阅支持的文件系统标志。默认值: 'r'
  • callback
    • err
    • 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, 
    });
    

    fs.readFile() 函数会缓冲整个文件。 为了最小化内存成本,尽可能通过 fs.createReadStream() 进行流式传输。

    fs.readFileSync(path[, options])

    这个是fs.readFile的同步版本说白了,fs.readFileSync的返回值就是读取后的data,当需要捕获错误的时候就直接使用try catch进行捕获就好了。
    (图片…是没有的,因为数据和上面异步的是一样的,直接上去看吧)

    • path | | | 文件名或文件描述符。
    • options |
      • encoding | 默认值: null
      • flag 参阅支持的文件系统标志。默认值: 'r'

      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文件)
      node学习笔记之fs(filesystem)模块_第1张图片
      node学习笔记之fs(filesystem)模块_第2张图片

      • file | | | 文件名或文件描述符。
      • data | | |
      • options | <>
        • encoding | 默认值: 'utf8'
        • mode 默认值: 0o666
        • flag 参阅支持的文件系统标志。默认值: 'w'
      • callback
        • err
      • 你可能感兴趣的:(javascript,node.js)