NodeJS基础入门-fs文件系统
文件I/O是由简单封装的标准POSIX函数提供。通过require('fs') 使用该模块。所有的方法都有异步和同步的形式。
异步方法的最后一个参数都是一个回调函数。传给回调函数的参数取决于具体方法,但回调函数的第一个参数都会保留给异常。如果操作成功完成,则第一个参数回事null或undefined。
const fs = require('fs');
// 编码为utf8
fs.readFile('./readme.txt', 'utf8',(err,data) => {
if (err) throw err;
console.log(data);
});
文件不存在:
/home/dex/web/nodejs/readfile.js:4
if (err) throw err;
^
Error: ENOENT: no such file or directory, open './readme'
文件存在:
This is a readme file
同步操作:
const fs = require('fs');
// 同步操作
const data = fs.readFileSync('./readme.txt', 'utf8');
console.log(data);
This is a readme file
同步比异步先执行,高并发的时候同步可能挡住其他用户的访问,web中推荐使用异步操作,。
如何写文件
const fs = require('fs');
fs.writeFile('./text','Hello World!',{ encoding: 'utf8' },err => {
if(err) throw err;
console.log('Done!');
})
另外可以换成一个Buffer来写:
const fs = require('fs');
const content = Buffer.from('Hello WORLD!');
fs.writeFile('./text', content, err => {
console.log('Done!');
})
~
查看文件的详细信息
const fs = require('fs');
fs.stat('./ext', (err,stats) => {
//if (err) throw err; //线上的话可以通过记日志
if (err) {
console.log('文件不存在')
return;
}
console.log(stats.isFile());
console.log(stats.isDirectory());
console.log(stats)
});
true
false
Stats {
dev: 2051,
mode: 33188,
nlink: 1,
uid: 1000,
gid: 1000,
rdev: 0,
blksize: 4096,
ino: 25168511,
size: 12,
blocks: 8,
atimeMs: 1544415275747.7136,
mtimeMs: 1544415267842.6614,
ctimeMs: 1544415267842.6614,
birthtimeMs: 1544415267842.6614,
atime: 2018-12-10T04:14:35.748Z,
mtime: 2018-12-10T04:14:27.843Z,
ctime: 2018-12-10T04:14:27.843Z,
birthtime: 2018-12-10T04:14:27.843Z }
文件重命名
const fs = require('fs');
fs.rename('./text', 'test.love', err => {
if(err) throw err;
});
文件删除
const fs = require('fs');
fs.unlink('./test.love', err => {});
~
文件夹相关操作
读文件目录:
const fs = require('fs');
fs.readdir('./',(err,files) => {
if (err) throw err;
console.log(files);
});
创建文件夹
const fs = require('fs');
fs.mkdir('test', err => {});
删除文件夹
const fs = require('fs');
fs.rmdir('test', err => {});
监视文件的变化
const fs = require('fs');
fs.watch('./', {
recursive: true
}, (eventType, filename) => {
console.log(eventType,filename);
});
change .readfile.js.swp
rename ttt
*监视可用于本地构建代码
流处理
// 流处理
读
const fs = require('fs');
const rs = fs.createReadStream('readme.txt');
rs.pipe(process.stdout);
This is a readme file
写
/ 流处理
const fs = require('fs');
const ws = fs.createWriteStream('./test');
const tid = setInterval(() => {
const num = parseInt(Math.random()*10);
console.log(num)
if(num<8) {
ws.write(num+'')
}else {
clearInterval(tid);
ws.end() // 结束触发事件
}
}, 200);
ws.on('finish', () => {
console.log('Done!')
});
0
9
Done!
如何解决回调地狱
用promisify:
const fs = require('fs');
const promisify = require('util').promisify;
const read = promisify(fs.readFile);
read('readme.txt').then(data => {
console.log(data.toString());
}).catch( ex => {
console.log(ex);
});
用同步函数解决:
const fs = require('fs');
const promisify = require('util').promisify;
const read = promisify(fs.readFile);
async function test() {
try {
const content = await read('readme.txt');
console.log(content.toString());
} catch(ex) {
console.log(ex);
}
}
test();
没有则显示错误:
{ Error: ENOENT: no such file or directory, open 'readme' errno: -2, code: 'ENOENT', syscall: 'open', path: 'readme' }
看起来像同步,实际上还是异步的写法
NodeJS基础入门-fs文件系统的更多相关文章
- 02 nodejs命令参数(NodeJS基础入门)
声明:本文章可供有一定js基础的朋友参考nodejs入门,本文未讲解nodejs的安装,如有需要的同学可以加QQ3382260752找我,进行交流学习. 建议使用开发软件:webstorm或hbuil ...
- NodeJS基础入门
1.前端最主流的JavaScript运行环境 1>Node.js是一个基于Chrome V8引擎的JavaScript运行环境. 2>Node.js使用了一个事件驱动.非阻塞式I/O的模型 ...
- NodeJS基础入门-Event
大多数Node.js核心API都采用惯用的异步事件驱动架构,其中某些类型的对象(触发器)会周期性地触发命名事件来调用函数对象(监听器). 例如,net.Server对象会在每次有新连接时触发事件;fs ...
- 边走边学Nodejs (基础入门篇)
1.什么是Node.js Nodejs ,或者node, 是一个基于ChromeJavaScript执行时建立的平台.用于方便地搭建响应速度快.易于扩展的网络应用.Node.js 使用事件驱动, 非堵 ...
- NodeJS基础入门-Buffer
Buffer.byteLength console.log(Buffer.byteLength('test')); console.log(Buffer.byteLength('我是C语言爱好者')) ...
- 深入Nodejs模块fs - 文件系统操作
node 的fs文档密密麻麻的 api 非常多,毕竟全面支持对文件系统的操作.文档组织的很好,操作基本分为文件操作.目录操作.文件信息.流这个大方面,编程方式也支持同步.异步和 Promise. 本文 ...
- nodeJS之fs文件系统
前面的话 fs文件系统用于对系统文件及目录进行读写操作,本文将详细介绍js文件系统 概述 文件 I/O 是由简单封装的标准 POSIX 函数提供的. 通过 require('fs') 使用该模块. 所 ...
- Linux基础入门学习笔记20135227黄晓妍
学习计时:共24小时 读书:1小时 代码:8小时 作业:3小时 博客:12小时 一.学习目标 1. 能够独立安装Linux操作系统 2. 能够熟练使用Linux系统的基本命令 3. 熟练使用L ...
- nodejs 基础篇整合
nodeJs 基础篇整合 最近有朋友也想学习nodeJs相关方面的知识,如果你是后端想接近前端,node作为一门跑在服务端的JS语言从这里入门再好不过了.如果你正好喜欢前端,想走的更高,走的更远.no ...
随机推荐
- 特殊形状图片之遮罩蒙版CSS3-Mask效果
前不久做了一个项目,需要一个小效果,就是获取用户头像以心形的形状展现在页面上,开始小五想的实现方式是canvas画图或CSS3的clip(剪切),发现都不理想,和设计稿里的图形美观度相差太大,而且实现 ...
- JSONPath中的表达式
在JsonPath中使用表达式是一个非常好的功能,可以使用简洁和复杂的JsonPath.JsonPath中的表达式基本上是评估为布尔值的代码片段.基于结果,仅选择满足标准的节点.让我们看一下它的更多内 ...
- Codeforces Round #564 (Div. 2) B. Nauuo and Chess
链接:https://codeforces.com/contest/1173/problem/B 题意: Nauuo is a girl who loves playing chess. One da ...
- M-HJ浇花
题目描述: 链接:https://ac.nowcoder.com/acm/contest/322/M来源:牛客网 HJ养了很多花(99999999999999999999999999999999999 ...
- Codeforces 140E(排列组合、dp)
要点 主要学到的东西:一个序列染色,相邻不染同色,恰用\(j\)种颜色的1.模式数.2.方案数.3.具体染色数. 从大的思路上来讲:先dp预处理出每一层的模式数:\(f[i][j]\)表示\(i\)个 ...
- Netty(6)关闭
客户端: public static void main(String[] args) throws Exception { final SslContext sslCtx; if (SSL) { ...
- qt QMessageBox 中文乱码的问题
QMessageBox::information(this,"Warn", "请插入U盘"); ==================> QMessageB ...
- cmd下一些常用的命令
systeminfo 列出主机名,内存等一些系统信息 tasklist 显示进程信息 (tasklist | finstr eclipse)
- 《java学习三》并发编程 -------线程池原理剖析
阻塞队列与非阻塞队 阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞.试图从空的阻塞队列中获取元素的线程将会被阻塞,直到 ...
- 事务的隔离级别和mysql事务隔离级别修改
A事务做了操作 没有提交 对B事务来说 就等于没做 获取的都是之前的数据 但是 在A事务中查询的话 查到的都是操作之后的数据 没有提交的数据只有自己看得到,并没有update到数据库. 查看InnoD ...