文章目录
- 一文大白话讲清楚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)
- 再来一个异步的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)
}
})
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'))
- 再来写异步的,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'))
}
})
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'))
-异步
const fs =require("fs")
fs.appendFile('test.txt','write by fs.appendFile','utf8',err=>{
console.log(fs.readFileSync('test.txt','utf8'))
})
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'))
const fs=require("fs")
fs.copyFile('test.txt','newtest.txt',err=>{
console.log(fs.readFileSync('newtest.txt','utf8'))
})
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')
})