web前端开发之JavaScript:node.js文件系统 的写入与读取
文件系统
Node 通过封装基本的POSIX函数来提供文件系统,使用require('fs')来使用这个模块,所有与文件相关的方法,都提供了异步和同步的形式。 异步的方法通常会将一个可选的回调函数作为最后一个参数,回调函数的第一个参数通常留给意外情况,如果操作是成功的,第一个参数将是null
或者undeefined
。 使用同步方法,对于任何意外都会即时抛出,可以使用try/catch
语句来处理意外情况,或者让错误时间向上冒泡。
使用文件系统,需要先引入fs模块,fs是核心模块,直接引入不需要下载
const fs = require("fs");
fs模块中所有的操作都有两种形式可供选择,同步和异步。
,也就是除非操作完毕,否则不会向下执行代码。异步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回。
同步文件写入
打开文件
fs.openSync(path,flags[,mode]);
-path 要打开文件的路径
-flages 打开文件要做的操作的类型
r 只读的
w 可写的
-mode 设置文件的操作权限,一般不传
返回值 该方法会返回一个文件的描述符作为结果,我们可以通过该描述符来对文件进行各种操作
向文件中写入内容
fs.writeSync(fd,string[,position[,encoding]]);
-fd 文件的描述符,需要传递要写入的文件的描述符
-string 要写入的内容
-position 写入的起始位置,一般不传
-encoding 写入的编码,默认utf-8,一般不传
保存并关闭文件
fs.closeSync(fd);
-fd 要关闭的文件描述符
var fs = require("fs"); //打开文件 var fd = fs.openSync("hello.txt",w); //向文件中希尔内容 var fw = fs.writeSync(fd,"hello fs"); //关闭文件 var fc = fs.closeSync(fd);
异步文件写入
fs.open(path,flags[,mode]callback)
-用来打开一个文件
-异步调用的方法,结果都是通过回调函数的参数返回的
-回调函数的两个参数:
err 错误对象,如果没有错误则为null
fd 文件描述符
1)fs.write(fd,string[,option[0,encoding]],callback)
2)fs.close(fd,callback)
-fd 文件描述符
//引入fs模块 var fs = require("fs"); var f; //打开文件 fs.open("hello2.txt","w",function(err,fd){ //判断是否出错 if(!err){ //如果没有出错,则对文件进行写入操作 fs.write(fd,"这是异步写入内容",function(err){ if(!err){ console.log("写入成功") } //关闭文件 fs.close(fd,function(err){ if(!err){ console.log("文件已关闭"); } }) }); }else{ console.log(err); } }); console.log(f);
简单文件写入
异步 fs.writeFile(file,data[,options],callback)
同步 fs.writeFileSync(file,data[,options])
-file 要操作的文件路径
-data 要写入的数据
-options 选项,可以对写入进行一些设置
-callback 当写入完成以后执行的函数
var fs = require("fs"); fs.writerFile("hello3.txt","这是通过writeFile写入的内容",function(){ if(!err){ console.log("写入成功"); } })
流式文件写入
同步、异步和简单文件写入都不适合大文件的写入,性能较差,容易导致内存溢出。
创建一个可写流
fs.createWriteStream(path[,options])
-path 文件路径
-options 配置的参数
var fs = require("fs"); //流式文件写入 //创建一个可写流 var ws = fs.createWriteStream("hello3.txt"); //可以通过监听流的open和close事件来监听流的打开和关闭 ws.once("open",function(){ console.log("流打开了"); }); ws.once("close",function(){ console.log("流关闭了"); }); //通过ws向文件中输出内容 ws.write("通过可写流输入的文件内容"); //关闭流 ws.end();
文件读取
同步文件读取
与同步文件写入一致
异步文件读取
与异步文件写入一致
简单文件读取
fs.readFile(path[,options],callback)
fs.readFileSync(path[,options])
-path 要读取文件的路径
-options 读取的选项
-callback 回调函数,通过回调函数将读取到的内容返回(err,data)
data 读取到的数据,会返回一个Buffervar fs = require("fs"); fs.readFile("hello.txt",function(err,data){ if(!err){ console.log(data.toString()); } });
流式文件读取
流式文件读取也可以适用于一些较大的文件,可以分多次将文件读取到内存中
var fs = require("fs"); //创建一个可读流 var rs = fs.createReadStream("an.jpg"); //监听流的开启和关闭 rs.once("open",function(){ console.log("可读流打开了~~"); }) rs.once("close",function(){ console.log("可读流关闭了~~") }) //如果要读取一个可读流中的数据,必须要为可读流绑定一个data事件,data事件绑定完毕,会自动开始读取数据 rs.on("data",function(data){ console.log(data); }) //pipe()可以将可读流中的内容,直接输出到可写流中 rs.pipe(ws);
fs模块的其他方法
验证文件是否存在
fs.exists(path,callback)(已废弃)
fs.existsSync(path)(常用)
获取文件状态
fs.stat(path,callback)
fs.statSync(path)
stat.isFile() 是否是文件
stat.isDirectory() 是否是一个文件夹
fs.stat("a.mp3",function(err,data){ console.log(stat.data) });
返回一个对象,在对象中保存了当前对象状态的相关信息
删除文件
fs.unlink(path,callback);
fs.unlinkSync(path);
fs.unlinkSync("hello.txt");
列出文件
fs.readdir(path[,options],callback)
fs.readdirSync(path[,options])
-读取一个目录的目录结构
files是 一个字符串数组,每一个元素就是一个文件夹或文件的名字
fs.readdir(".",function(err,files){ if(!err){ console.log(files); } } );
截断文件
fs.truncateSync(path,len,callback)
fs.truncate(path,len);
-截断文件,将文件修改为指定大小
fs.truncateSync("hello2.txt",10);
创建目录
fs.mkdir(path[,mode],callback);
fs.mkdirSync(path);
fs.mkdirSync("hello")
删除一个目录
fs.rmdir(path,callback);
fs.rmdirSync(path);
重命名
fs.rename(oldPath,newPath,callback);
fs.renameSync(oldPath,newPath);
-oldPath 旧路径
-newPath 新路径
-callback 回调函数
fs.rename("1.txt","new1.txt",function(err){ if(!err){ console.log("修改成功~~"); } } });
监视文件修改
fs.watchFile(filename[,options],listener);
-filename 要监视的文件的名字
-options 需要配置的选项
-listener 回调函数,当文件发生变化时,回调函数执行,回调函数中有两个参数,curr 当前文件状态,prev修改前文件状态,这两个对象都是stats对象
fs.watchFile("hello2.txt",function(curr,prev){ console.log("修改前文件大小:"+prev.size); console.log("修改后文件大小:"+curr.size); });
- 点赞
- 收藏
- 关注作者
评论(0)