目录
概述:
通过node操作系统中的文件
同步文件写入
/***
* 在 Node 中,文件系统的交互是非常重要的,服务器的本质就将本地的文件发送给远程的客户端
* Node 通过 fs 模块来和文件系统进行交互
* 该模块提供了一些标准文件访问 API 来打开、读取、写入文件,以及与其交互。
* 要使用 fs 模块,首先需要对其进行加载一 const fs = require ( " fs " ) ;
* */
//引入fs模块
var fs = require("fs");
console.log(fs)
/**
* 同步和异步调用一 fs 模块中所有的操作都有两种形式可供选书同步和异步。
* · 同步文件系统会阻塞程序的执行,也就是除非操作完毕,否则不会向下执行代码。
* · 异步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回。
* */
/**
* 文件的写入
* 1. 打开文件
* fs.openSync(path,flags,[,mode])
* path: 要打开的路径
* flags 打开文件要做的操作类型 r 只读的 w 可写的
* mode 设置文件的操作权限,一般不传
* 该方法会返回一个文件描述符,我们可以根据这个描述符对文件进行各种操作
* 2.像文件中写入内容
* fs.writeSync(fd,string[,position[,encoding]])
* fd 文件的描述符
* string 要写入的内容
* 3.保存并关闭文件
* fs.closeSync(fd)
* fd 文件的描述符
* */
var fd = fs.openSync("fs.txt","w");
console.log(fd)
fs.writeSync(fd,"假如你看到了我,也不要太过冷漠")
fs.closeSync(fd)
异步文件写入
//引入fs模块
var fs = require("fs");
//异步调用的方法都是通过回调函数的参数 arguments 返回的
var fd = fs.open("fs2.txt","w",function (err,fd) {
/**
* err 错误标识,如果是null则正常
* fd 文件描述符
*/
console.log(err)
//文件打开正常
if(!err){
fs.write(fd,"也不要特别难过",function (error) {
if(!error){
console.log("写入成功")
}
//关闭文件
fs.close(fd,function (errorc) {
if(!errorc){
console.log("关闭成功")
}
})
})
}
});
console.log("是否是异步操作")
简单的文件写入
/**
* 简单文件写入
* **/
//异步
//引入fs模块
var fs = require("fs");
fs.writeFile("fs2.txt","异步简单",function (err) {
if(!err){
console.log("写入成功")
}
}
)
//同步
fs.writeFileSync("fs3.txt","同步简单")
简单流式文件读取
/**
* 流式文件读取适用于一些比较大的文件,可以分多次将文件读取到内存中,可以分对此将文件读取到内存中
* */
var fs = require("fs");
//创建一个可读流
var rs = fs.createReadStream("D:/bushuangli/tempVideo/视频/03.尚硅谷_node基础_node简介.avi");
//创建一个可写流
var ws = fs.createWriteStream("b.avi")
//监听流的开起和关闭
rs.once("open",function () {
console.log("可读流打开了-")
})
rs.once("close",function () {
console.log("可读流关闭了-")
})
//监听流的开起和关闭
ws.once("open",function () {
console.log("可写流打开了-")
})
ws.once("close",function () {
console.log("可写流关闭了-")
})
//pipe() 可以将可读流中的内容,直接输出到可写流中
rs.pipe(ws);
文件模块的其他操作
//引入fs模块
var fs = require("fs");
//判断文件是否存在
var bexist = fs.existsSync("b2.avi");
var bexist2 = fs.existsSync("b.avi");
console.log(bexist);
console.log(bexist2);
//获取文件状态
fs.stat("b.avi",function (err,stat) {
console.log(err)
console.log(stat)
})
//删除文件
//fs.unlinkSync("b.avi");
//读取一个目录的目录结构
fs.readdir(".",function (err,files) {
console.log(files);
})
//截断文件.改变文件指定的大小
//fs.truncateSync("fs2.txt",10)
//创建一个目录
//fs.mkdirSync("hello");
//删除一个目录
//fs.rmdirSync("hello");
//重命名文件夹
/*fs.renameSync("a.png","aa.png",function (err) {
if(!err){
console.log("rename")
}
})*/
//剪切移动
/*
fs.renameSync("aa.png","D:\\bushuangli\\tempVideo\\视频\\aa.png",function (err) {
if(!err){
console.log("rename")
}
})*/
//监视文件的修改
/**
* interval 监听间隔 毫秒
*/
fs.watchFile('fs2.txt',{interval:1000}, (curr, prev) => {
console.log(`当前的最近修改文件大小是: ${curr.size}`);
console.log(`之前的最近修改文件大小是: ${prev.size}`);
console.log(`当前的最近修改时间是: ${curr.mtime}`);
console.log(`之前的最近修改时间是: ${prev.mtime}`);
});