仪陇网站建设seo专业培训技术
文章目录
- 一. 文件写入
- (1) 写入文件场景
- (2)异步写入-writeFile
- (3)同步写入-writeFileSync
- (4)追加写入-appendFile/appendFileSync/writeFile
- (5)流式写入-createWriteStream
- 二.文件读取
- (1) 文件读取应用场景
- (2) 异步读取-readFile
- (3) 同步读取-readFileSync
- (4) 流式读取-createReadStream
- (5)复制文件练习
- 三.文件移动和重命名-rename
- 四.文件删除
- 五.文件夹操作
- (1)创建文件夹-mkdir
- (2) 读取文件夹-readdir
- (3)删除文件夹-rmdir
- 六.查看资源状态-stat
- 七.`__dirname`和`__filename`
- 八.path
一. 文件写入
(1) 写入文件场景
-
下载文件
-
安装软件
-
保存程序日志
-
编辑器保存文件
-
视频录制
(2)异步写入-writeFile
//1.fs.writeFile(file,data[,options], callback)
/*** 参数说明:* 1. file文件名* 2. data待写入的数据* 3. options选项设置(可选)* 4. callback写入回调*/
function fun1(){fs.writeFile('./写入的文本.txt','写入的文字',err=>{if(err){console.log(err)return}console.log('写入成功')})
}
(3)同步写入-writeFileSync
参数与fs.writeFile大体一致, 只是没有callback参数
(4)追加写入-appendFile/appendFileSync/writeFile
- fs.appendFile(file,data[,options],callback)
fs.appendFile('./写入的文本.txt','\n追加的文本',err=>{if(err) return console.log('追加成功')
}
-
使用writeFile
function fun3(){fs.writeFile('./写入的文本.txt','追加的文本',{flag:'a'},err=>{if(err) returnconsole.log('writeFile追加成功')}) }
(5)流式写入-createWriteStream
fs.createWriteStream(path[,options])
-
流式写入可以减少打开关闭文件的次数
-
流式写入适用于大文件写入或者频繁写入的场景,writeFile适用于写入频繁较低的场景
let ws = fs.createWriteStream('./流式写入.txt')ws.write('1\n')ws.write('2\n')ws.write('3\n')ws.write('4\n')ws.end()
二.文件读取
(1) 文件读取应用场景
- 电脑开机
- 程序运行
- 编辑器打开文件
- 查看图片
- 播放视频
- 播放音乐
- Git查看日志
- 上传文件
- 查看聊天记录
(2) 异步读取-readFile
//fs.readFile(path[,options],callback)
let path = './写入的文本.txt'
fs.readFile(path,(err,data) => {if(err) throw errconsole.log(data.toString())
})
(3) 同步读取-readFileSync
//fs.readFileSync(path[,options])
let path = './写入的文本.txt'
let data = fs.readFileSync(path)
console.log(data.toString())
(4) 流式读取-createReadStream
fs.createReadStream(path[, options])
let rs = fs.createReadStream('./写入的文本1.txt')
//每次取出64KB数据后再执行一次data回调
rs.on('data', data=>{console.log(data.toString());console.log(data.length)
})
//读取完成后, 执行end回调
rs.on('end', ()=>{console.log('读取完成')
})
(5)复制文件练习
const fs = require('fs')
const process = require('process')
/*** 复制测试.mp4到fs文件夹下* 1. readFile: 异步读取* 2. createReadStream: 流式读取*/// 1.readFile-writeFile
let readPath = '../测试.mp4'
let writePath = './测试(1).mp4'
let writePath2 = './测试(2).mp4'
function fun1(){// 读取fs.readFile(readPath,(err,data)=>{console.log('读取成功')// console.log(data)// 写入fs.writeFile(writePath,data,err=>{if(err) throw errconsole.log('写入成功')})})
}// fun1()//2. createReadStream-createWriteStream
function fun2(){let rs = fs.createReadStream(readPath)let ws = fs.createWriteStream(writePath2)//2.1rs.on('data', data=>{// console.log(data.length)ws.write(data)// ws.end() //不能加这个,加了出错})rs.on('end',()=>{console.log('读取完成')})//2.2// 管道流:rs.pipe(ws)
}
// fun2()/*** process: 获取代码运行占量*/// fun1() //rss 20701184字节 19MB
fun2() //rss 20635648
console.log(process.memoryUsage())
三.文件移动和重命名-rename
在node中, 可以用rename和renameSync来移动或重命名文件或文件夹
fs.rename(oldPath, newPath, callBack)
- oldPath 文件当前路径
- newPath: 文件新的路径
- callBack: 操作后的回调
const fs = require('fs')
// 1.fs.rename 同步修改名字和文件移动
// 2.fs.renameSync 异步修改名字和文件移动//1.fs.name(oldPath, newPath, callback)
let oldPath = "./流式写入.txt"
let newPath = "./流式写入1.txt"
fs.rename(oldPath,newPath,err=>{if(err) throw errconsole.log('修改')
})
四.文件删除
在node中可以使用unlink或unlinkSync来删除文件
fs.unlink(path, callback)
const fs = require('fs')
/*** 1.unlink unlinkSync* 2.rm rmSync*///1.fs.unlink(path,callback)
// fs.unlink('./测试1',err=>{
// if(err) throw err
// })//2.fs.rm(path,callback)
fs.rm('./测试2',err=>{if(err) throw err
})
五.文件夹操作
(1)创建文件夹-mkdir
fs.mkdir(path[, options],callback)
- 异步创建文件夹
fs.mkdir('./page', err => {if (err) {throw err} else {console.log('创建成功')}})
- 异步创建递归文件夹
fs.mkdir('./a/b/c',{recursive: true}, err => {if (err) {throw err}console.log('创建成功')})
(2) 读取文件夹-readdir
fs.readdir(path[, options],callback)
fs.readdir('./', (err,data) => {if (err) {throw err} else {console.log(data)}})
(3)删除文件夹-rmdir
-
fs.rmdir(path[,options],callback
/*** 只能删除空文件夹*/ fs.rmdir('./a', err => {if (err) {throw err} else {console.log('删除成功')} })
-
深度删除
fs.rmdir('./a',{recursive: true}, err => {if (err) {throw err} else {console.log('删除成功')}})
六.查看资源状态-stat
- 异步: fs.stat(path[, options], callback)
- 同步: fs.statSync(path[,options])
const fs = require('fs')
fs.stat('./测试(2).mp4',(err,data)=>{if(err) throw errconsole.log(data)console.log(data.isFile())//检测是否为文件console.log(data.isDirectory()) //检测是否为文件夹
})
/**Stats {dev: 286136082,mode: 33206,nlink: 1,uid: 0,gid: 0,rdev: 0,blksize: 4096,ino: 1688849860562346,size: 15423418, //文件体积blocks: 30128,atimeMs: 1678959494454.5403,mtimeMs: 1678959494454.5403,ctimeMs: 1678959494454.5403,birthtimeMs: 1678959448707.1306, //创建时间atime: 2023-03-16T09:38:14.455Z,mtime: 2023-03-16T09:38:14.455Z, //最后修改时间ctime: 2023-03-16T09:38:14.455Z,birthtime: 2023-03-16T09:37:28.707Z
}*/
七.__dirname
和__filename
__dirname
保存着当前文件所在目录的绝对路径
, 可以使用__dirname
与文件名拼接成绝对路径__filename
表示当前正在执行的脚本的文件名. 它将输出文件所在位置的绝对路径
console.log(__dirname) //C:\Users\wang9\Desktop
console.log(__filename) //C:\Users\wang9\Desktop\file.js
八.path
- path.resolve: 拼接规范的绝对路径
- path:sep: 获取操作系统的路径分隔符
- path.parse: 解析路径并返回对象
- path.basename:获取路径的基础名称
- path.dirname:获取路径的目录名
- path.extname:获取路径的扩展名