文件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文件系统的更多相关文章

  1. 02 nodejs命令参数(NodeJS基础入门)

    声明:本文章可供有一定js基础的朋友参考nodejs入门,本文未讲解nodejs的安装,如有需要的同学可以加QQ3382260752找我,进行交流学习. 建议使用开发软件:webstorm或hbuil ...

  2. NodeJS基础入门

    1.前端最主流的JavaScript运行环境 1>Node.js是一个基于Chrome V8引擎的JavaScript运行环境. 2>Node.js使用了一个事件驱动.非阻塞式I/O的模型 ...

  3. NodeJS基础入门-Event

    大多数Node.js核心API都采用惯用的异步事件驱动架构,其中某些类型的对象(触发器)会周期性地触发命名事件来调用函数对象(监听器). 例如,net.Server对象会在每次有新连接时触发事件;fs ...

  4. 边走边学Nodejs (基础入门篇)

    1.什么是Node.js Nodejs ,或者node, 是一个基于ChromeJavaScript执行时建立的平台.用于方便地搭建响应速度快.易于扩展的网络应用.Node.js 使用事件驱动, 非堵 ...

  5. NodeJS基础入门-Buffer

    Buffer.byteLength console.log(Buffer.byteLength('test')); console.log(Buffer.byteLength('我是C语言爱好者')) ...

  6. 深入Nodejs模块fs - 文件系统操作

    node 的fs文档密密麻麻的 api 非常多,毕竟全面支持对文件系统的操作.文档组织的很好,操作基本分为文件操作.目录操作.文件信息.流这个大方面,编程方式也支持同步.异步和 Promise. 本文 ...

  7. nodeJS之fs文件系统

    前面的话 fs文件系统用于对系统文件及目录进行读写操作,本文将详细介绍js文件系统 概述 文件 I/O 是由简单封装的标准 POSIX 函数提供的. 通过 require('fs') 使用该模块. 所 ...

  8. Linux基础入门学习笔记20135227黄晓妍

    学习计时:共24小时 读书:1小时 代码:8小时 作业:3小时 博客:12小时 一.学习目标 1. 能够独立安装Linux操作系统   2. 能够熟练使用Linux系统的基本命令   3. 熟练使用L ...

  9. nodejs 基础篇整合

    nodeJs 基础篇整合 最近有朋友也想学习nodeJs相关方面的知识,如果你是后端想接近前端,node作为一门跑在服务端的JS语言从这里入门再好不过了.如果你正好喜欢前端,想走的更高,走的更远.no ...

随机推荐

  1. 重构之Divergent Change(发散式变化)&Shotgun Surgery (散弹式修改)

    5.Divergent Change发散式变化 描述:一个类被锚定了多个变化,当这些变化中的任意一个发生时,就必须对类进行修改. 解释:一个类最好只因一种变化而被修改 操作:你应该找出某特定原因而造成 ...

  2. STP-11-多生成树:IEEE 802.1s

    IEEE802.1s多生成树(MultipleSpanningTrees,MST)有时也称为多STP(MultipleSTP,MSTP),它定义了在使用802.1QVLAN网络中,部署多实例STP的标 ...

  3. springmvc配置的国际化资源文件显示为???key???的错误原因

    问题概述: 在spring mvc 的jstl view 视图解析器中 使用jstl <fmt:message key=”“”></fmt> 不不要绑定也可以正常显示,这里却显 ...

  4. Hive进阶_开发Hive的自定义函数

    Hive中的自定义函数简介 (1) 在类中创建自定义函数.自定义UDF需要继承'org.apache.hadoop.hive.ql.exec.UDF',实现evaluate函数,evaluate函数支 ...

  5. Core2.0 项目到2.1

    Core2.0 项目到2.1 https://www.cnblogs.com/FlyLolo/p/ASPNETCore2_10.html .NET Core 2.1 终于发布了, 赶紧升级一下. 一. ...

  6. 079 Word Search 单词搜索

    给定一个二维面板和一个单词,找出该单词是否存在于网格中.这个词可由顺序相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格.同一个单元格内的字母不允许被重复使用.例如,给定 二 ...

  7. SpringBoot 2.x (13):整合ActiveMQ

    ActiveMQ5.x不多做介绍了,主要是SpringBoot的整合 特点: 1)支持来自Java,C,C ++,C#,Ruby,Perl,Python,PHP的各种跨语言客户端和协议 2)支持许多高 ...

  8. 编写Servlet,验证用户登录,如果用户名与密码都为“admin”则验证通过,跳转欢迎页面,否则弹出提示信息“用户名或密码错误,请重新输入!”,点击“确定”后跳转至登录页面

    java代码:(Test1) package com.test; import java.io.IOException; import java.io.PrintWriter; import java ...

  9. linux命令行—《命令行快速入门》

    pwd print working directory 打印工作目录 hostname my computer's network name 电脑在网络中的名称 mkdir make director ...

  10. Vue风格指南总结及对应ESLint规则配置

    全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/10906951.html,多谢,=.=~ 必要的:规避错误: 强烈推荐:改善可读性和开发体验: 推 ...