一文大白话讲清楚Node文件系统(filesystem)的应用

文章目录

  • 一文大白话讲清楚Node文件系统(filesystem)的应用
  • 1.啥是Node的文件系统
    • 1.1 啥是fs
    • 1.2 fs的文件属性
      • 1.2.1 权限位mode
      • 1.2.2 标识位
      • 1.2.3 文件描述
    • 1.3 文件操作方法
      • 1.3.1 文件读取 readFile(url,options,callback)和readFileSync(url,options)
      • 1.3.2 文件写入 writeFileSync(url,data,options)文件写入 writeFile(url,data,options,callback)
      • 1.3.3 文件追加写入 appendFileSync(url,data,options)和appendFile(url,data,options,callback)
      • 1.3.4 文件拷贝 copyFile(url,otherUrl,callback)和copyFile(url,otherUrl)
      • 1.3.5 创建目录 mkdirSync(url)和mkdir(url,callback)

一文大白话讲清楚Node文件系统(filesystem)的应用

1.啥是Node的文件系统

1.1 啥是fs

  • Node的文件系统(filesystem)简称fs
  • 其实就是Node的一个模块,该模块主要负责本地文件的读写能力,可以理解是为POSIX文件操作命令的简单包装
  • Node所有对文件的操作都需要通过fs来实现
  • 同时操作文件的时候可以选择同步和异步两种方式

1.2 fs的文件属性

1.2.1 权限位mode

  • 啥是权限位,就是文件针对文件所有者,文件所属组,其他用户进行权限分配。权限类型包括读、写、执行三种。分别用数字4、2/1表示

1.2.2 标识位

  • 标识位代表对文件具体的操作权限限制,如可读、可写、既可读又可写
标识位 含义
r 读取文件,如果文件不存在,则抛出异常
r+ 读取并写入文件,如果文件不存在,则抛出异常
rs 读取并写入文件,知识操作系统绕过本地文件系统缓存
w 写入文件,文件不存在,会被创建
wx 写入文件,排它方式打开
w+ 读取并写入文件,文件不存在则创建文件,如存在则清空后写入
wx+ 和w+一样
a 追加写入,文件不存在则创建文件
ax 与a一样,使用排它方式打开
a+ 读取并追加写入,不存在则创建
ax+ 与a+一样,使用排它方式打开
  • 啥叫排他方式,就是文件同一时间只能被一个进程或线程访问,其他进程和线程必须要等到当前访问结束才能访问,用于需要确保数据完成性和一致性的场景

1.2.3 文件描述

  • 操作系统为每个打开的文件分配一个名为文件描述符的数值标识,文件操作使用这些文件描述符来识别与追踪每个特定的文件
  • 在Node中,没操作一个文件,文件描述符都是递增的,文件描述符一般从3开始,012已经被占用,分别是process.in、process.out、process.stderr

1.3 文件操作方法

1.3.1 文件读取 readFile(url,options,callback)和readFileSync(url,options)

  • 想必看名字就知道了吧,一个是异步一个是同步
  • 上代码
  • 新建一个文本文件test.txt,里面内容为hello fs然后新建一个node.js
  • 在node.js里面去读test.txt
  • 和readFileSync(url,options)url表示读取的文件路径,options包含encoding编码,默认为null和flag标识位,默认为r.
  • 可以直接传入encoding
const fs =require('fs')
let readRsBUffer=fs.readFileSync('test.txt')
let readRsStr=fs.readFileSync('test.txt',{encoding:'utf8',flag:'r'})
console.log(readRsBUffer)//
console.log(readRsStr)//hello fs
  • 再来一个异步的readFile(url,options,callback)url表示读取的文件路径,options包含encoding编码,默认为null和flag标识位,默认为r,callback为读取完以后得回调函数
  • 可以直接传入encoding
const fs=require("fs")
fs.readFile('test.txt',{encoding:'utf8',flag:'r'},(err,data)=>{
    if(!err){
        console.log(data)//hello fs
    }
})

1.3.2 文件写入 writeFileSync(url,data,options)文件写入 writeFile(url,data,options,callback)

  • 同步写入writeFileSync(url,data,options)url表示文件路径,打他表示要写入的数据,可以是string或者buffer,options包含encoding编码,默认为utf8和flag标识位,默认为w,mode权限位,默认0o666。
  • 可以直接传入encoding
const fs=require('fs')
fs.writeFileSync('test.txt','write by fs.writeFileSync','utf8')
console.log(fs.readFileSync('test.txt','utf8'))//write by fs.writeFileSync
  • 再来写异步的,writeFile(url,data,options,callback)url表示文件路径,打他表示要写入的数据,可以是string或者buffer,options包含encoding编码,默认为utf8和flag标识位,默认为w,mode权限位,默认0o666。callback表示回调函数
const fs =require("fs")
fs.writeFile('test.txt','write by fs.writeFile','utf8',err=>{
    if(!err){
        console.log(fs.readFileSync('test.txt','utf8'))//write by fs.writeFile
    }
})

1.3.3 文件追加写入 appendFileSync(url,data,options)和appendFile(url,data,options,callback)

  • 用法跟writeFile和writeFileSync一毛一样,直接上代码
  • 同步
const fs=require("fs")
fs.appendFileSync('test.txt','write by fs.appendFileSync','utf8')
console.log(fs.readFileSync('test.txt','utf8'))//write by fs.writeFilewrite by fs.appendFileSync

-异步

const fs =require("fs")
fs.appendFile('test.txt','write by fs.appendFile','utf8',err=>{

    console.log(fs.readFileSync('test.txt','utf8'))//write by fs.writeFilewrite by fs.appendFileSyncwrite by fs.appendFile

})

1.3.4 文件拷贝 copyFile(url,otherUrl,callback)和copyFile(url,otherUrl)

  • 同步copyFile(url,otherUrl),把url的内容拷贝到otherUrl
  • 把test的内容“hello fs"拷贝到newtest
const fs=require("fs")
fs.copyFileSync('test.txt','newtest.txt')
console.log(fs.readFileSync('newtest.txt','utf8'))//hello fs
  • 异步
const fs=require("fs")
fs.copyFile('test.txt','newtest.txt',err=>{
    console.log(fs.readFileSync('newtest.txt','utf8'))//hello fs
})

1.3.5 创建目录 mkdirSync(url)和mkdir(url,callback)

  • 同步kdirSync(url),url为目录的路径,没有返回值,所以必须要保证传入的路径正确
const fs=require('fs')
fs.mkdirSync('nodeDir')
  • 异步kdirSync(url,callback),url为目录的路径,没有返回值,所以必须要保证传入的路径正确,callback是回调函数
const fs=require('fs')
fs.mkdir('nodeDir',err=>{
    if(!err)console.log('make successful')
})

你可能感兴趣的:(node,node.js,filesystem,node文件系统,node文件操作)