你还不知道node.js有哪些文件操作么

阅读: 评论:0

你还不知道node.js有哪些文件操作么

你还不知道node.js有哪些文件操作么

文件系统(File system)

  • 文件系统简单来说就是通过Node来操作系统中的文件
  • 使用文件系统,需要先引入fs模块,fs是核心模块,直接引入不需要下载

文章目录

  • Buffer
  • 同步与异步
  • 文件的写入
    • 1.同步文件写入
    • 2.异步文件写入
    • 3.简单文件写入
    • 4.流式文件写入
  • 文件的读取
    • 1.简单文件读取
    • 2.流式文件读取
  • fs的其他方法


Buffer

Buffer(缓冲区)

  • 从结构上看Buffer非常像一个数组,它的元素为16进制的两位数。
  • 实际上一个元素就表示内存中的一个字节。实际上Buffer中的内存不是通过JavaScript分配的,而是在底层通过C++申请的。也就是我们可以直接通过Buffer来创建内存中的空间。
var str="hello 菜鸟";
var buf=Buffer.from(str);
console.log(buf);//<Buffer 68 65 6c 6c 6f 20 e8 8f 9c e9 b8 9f>
console.log(buf.length);//12
console.log(str.length);//8/*创建指定长度的buffer,alloc和allocUnsafe两者都是创建指定大小的Buffer,两者的区别在于:alloc创建指定大小的buffer时,会将buffer中的数据全部初始化为00allocUnsafe创建指定大小的buffer时,会含有一些敏感字符*/
var buf=Buffer.alloc(10);
console.log(buf);//<Buffer 00 00 00 00 00 00 00 00 00 00>
buf[0]=66;
console.log(buf);//<Buffer 42 00 00 00 00 00 00 00 00 00>var buf=Buffer.allocUnsafe(10);
console.log(buf);//<Buffer 21 e1 48 9f 17 00 00 00 00 00>
buf[0]=66;
console.log(buf);//<Buffer 42 e1 48 9f 17 00 00 00 00 00>

提示:以下是本篇文章正文内容,下面案例可供参考

同步与异步

  同步和异步调用 fs模块中所有的操作都有两种形式可供选择 同步和异步。

  1. 同步文件系统会阻塞程序的执行,也就是除非操作完毕,否则不会向下执行代码。
  2. 异步文件系统不会阻塞程序的执行,而是 在操作完成时,通过回调函数将结果返回。

文件的写入

1.同步文件写入

同步写入文件fs.openSync(path[, flags, mode])path <string> | <Buffer> | <URL>flags <string> | <number> 默认值: 'r'"r" 只读的"w" 可写的mode <string> | <integer> 默认值: 0o666 设置文件的操作权限,一般不写fs.writeSync(fd, string[, position[, encoding]])fd <integer> 传递要写入文件的描述符string <string> 要写入文件的内容position <integer>encoding <string>返回: <number> 写入的字节数。fs.closeSync(fd)fd <integer> 传递要关闭文件的描述符

var fs=require("fs");
var fd=fs.openSync(&#","w");
fs.writeSync(fd,"你是个傻子");
fs.closeSync(fd);

2.异步文件写入

var fs=require("fs");
fs.open(&#","w",function (err,fd){if(!err){fs.write(fd,"这是第一个异步写入的内容",function (err){if (!err){fs.close(fd,function (err){if(!err){console.log("文件已关闭");}else{consloe.log(err);}});}else {console.log(err);}});}else{console.log(err);}
});

3.简单文件写入

   简单文件的写入flag:决定文件的访问方式r 只读r+ 读写w 写入r+和w两种方式都可以像文件中写入内容,区别在于:r+只能像已存在的文件中写入内容,若该文件还没有创建则报错w可以像任何文件中写入文件,若该文件不存在则创建该文件a 追加
var fs=require("fs");
fs.writeFile(&#","这是writeFile写入的内容",{flag:"r+"},function (err){if(!err){console.log("写入成功!!!");}else{console.log(err);}
})

4.流式文件写入

  同步、异步、简单文件写入都不适合大文件的写入,性能较差,容易导致内存溢出
var fs=require("fs");
/*fs.createWriteStream(path,options);path 文件路径options 配置的参数*///创建一个可写流
var ws&#ateWriteStream(&#");
/*可以通过监听流的打开和关闭on(事件字符串,回调函数)绑定一个长期的事件once(事件字符串,回调函数)可以为对象绑定一次性的事件,事件执行一次之后就自动关闭了*/ws.once("open",function (){console.log("我打开了");
})ws.once("close",function (){console.log("我关闭了");
})ws.write("这是流式文件写入的内容");
ws.write("nihao a");
ws.write("沃什胡斯");
ws.write("这、内容");
ws.write("的内容");
ws.write("容");
ws.write("内容");ws.close();

文件的读取

1.简单文件读取

简单文件读取fs.readFile(path[, options], callback)path 文件的路径options 读取的选项callback 回调函数
var fs=require("fs");
fs.readFile("1.jpg",function (err,data){if(!err){fs.writeFile("hello.jpg",data,function (err) {if(!err){console.log("文件写入成功!!!");}})}else {console.log(err);}
})

2.流式文件读取

var fs=require("fs");
//创建一个可读流
var rs&#ateReadStream(&#");
//创建一个可写流
var ws&#ateWriteStream(&#");
rs.once("open",function (){console.log("可读流打开————");
})
rs.once("close",function (){console.log("可读流关闭————");
})
ws.once("open",function (){console.log("可写流打开————");
})
ws.once("close",function (){console.log("可写流关闭————");
})
//如果要读取一个可读流中的数据,就必须为可读流绑定一个data事件,data事件绑定完毕,他会自动开始读取数据
rs.once("data",function (data) {//将读取到的数据写入到可写流中ws.write(data,function (err) {ws.close();})
})
pipe()可以直接将可读流的内容输出到可写流中
rs.pipe(ws);

fs的其他方法

验证路径是否存在- fs.exists(path , callback)- fs.existsSync(path)获取文件状态信息- fs.stat(path,callback)- fs.statSync(path)删除文件- fs.unlink(path, callback)- fs.unlinkSync(path)列出文件- fs.readdir(path[,options], callback)- fs.readdirSync(path[,options])截断文件- fs.truncate(path, len, callback)- fs.truncateSync(path, len)建立目录- fs.mkdir(path[,mode], callback)- fs.mkdirSync(path[, mode])删除目录- fs.rmdir(path, callback)- fs.rmdirSync(path)重命名文件和目录,功能相当于我们常用的Ctrl+ame(oldPath, newPath, callback)- fs.renameSync(oldPath,newPath)监视文件更改写入- fs.watchFile(filename[,options],listener)
var fs=require("fs");console.istsSync(&#"));//trueconsole.log(fs.statSync(&#"));fs.unlinkSync(&#");console.addirSync("."));//返回当前路径下的文件名fs.truncateSync(&#",10);//将文件中的内容截断为10个字节fs.mkdirSync("a");fs.rmdirSync("a");fs.renameSync(&#",&#");
console.istsSync(&#"));//falsefs.watchFile(&#",{interval:1000},function (cur,pre) {console.log("修改前文件大小"+pre.size);console.log("修改后文件大小"+cur.size);
})

本文发布于:2024-02-04 22:57:33,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170718297060499.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:你还不   操作   文件   有哪些   js
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23