Node.js内置的文件系统模块(fs)
异步读取文件
按照js的标准,异步读取一个文本文件的格式如下:
'use strict'
const fs = require('fs')
fs.readFile('test.txt', 'utf-8', function(err, data){
if(err){
cconsole.log(err)
}else{
console.log(data)
}
})
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
请注意,test.txt文件必须在当前目录下,且文件编码必须为utf-8
如果我们读取的文件不是文本文件,而是二进制文件,怎么办呢?
下面演示如何读取一个图片文件:
'use strict'
const fs = rquire('fs')
fs.readFile('test.png', function(err, data){
if(err){
console.log(err)
}else{
console.log(data)
console.log(data.length + 'bayes')
}
})
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
当读取二进制文件时,不传入文件编码时,回调函数的data参数将返回一个buffer
对象。在Node.js中,buffer
对象可以和String
做转换,例如,把一个buffer
转化成String
:
var text = data.toString('utf-8')
- 1
把String
转化为Buffer
var buf = new Buffer('text', 'uft-8')
- 1
同步读取文件
fs
模块也提供相应的同步读取文件函数。与异步相比,多了一个Sync后缀,并且不接受回调函数,函数直接返回结果。
用fs
模块同步读取文件如下:
'use strict'
const fs = require('fs')
var data = fs.readFileSync('test'.txt, 'utf-8')
- 1
- 2
- 3
- 4
- 5
如果同步读取文件失败,则需要使用try...catch
捕获该错误。
try{
var data = fs.readFileSync('test.txt', 'utf-8')
}catch(err){
// 出错了
}
- 1
- 2
- 3
- 4
- 5
写文件
例如:
'use strict'
const fs = require(''fs)
fs.writeFile('test.txt', data, function(err){
if(err){
console.log(err)
}else{
console.log('ok')
}
})
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
writeFile
方法的参数依次是文件名,数据和回调函数。如果传入的数据类型是String
,默认按UTF-8
编码写入文件,如果传入的数据类型是Buffer
,则写入的是二进制文件。回调函数只关心成功与否,因为需要一个err
参数。
和 readFile
类似,writeFile
也有一个同步的方法,叫writeFileSync
,例如:
const data = 'Hello,Node.js'
writeFileSync('test.txt', data)
- 1
- 2
stat
如果我们要获取文件的大小,创建时间等信息,可以使用fs.stat(),它返回的是一个Stat对象,能告诉我们文件或者目录的详细信息。
'use strict'
const fs = require('fs')
fs.stat('test.txt', function(err, stat){
if(err){
console.log(err)
} else {
// 是否是文件
console.log('isFile:' + stat.isFile())
// 是否是目录
console.log('isDir' + stat.isDirectory())
if(stat.isFile()){
// 文件大小
console.log('size:' + stat.size)
// 创建时间
console.log('crateTime:' + stat.birthtime)
// 修改时间
console.log('modifiedTime:' + stat.mtime)
}
}
})
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
运行结果如下:
isFile: true
isDirectory: false
size: 181
crateTime: Fri Dec 11 2015 09:43:41 GMT+0800 (CST)
modifiedTime: Fri Dec 11 2015 12:09:00 GMT+0800 (CST)
- 1
- 2
- 3
- 4
- 5
stat也有一个同步的方法,这里就不多做叙述了。
由于Node.js环境执行的JavaScript代码是服务器代码,所以,绝大多数需要在服务器执行复杂的逻辑代码,所以必须使用异步代码,否则,同步代码在执行时,服务器停止响应,因为JavaScript只有一个执行线程。
Node.js内置的文件系统模块(fs)的更多相关文章
- Node.js内置的工具和第三方模块来进行单步调试
1.命令行调试: Node.js调试命令: run 执行脚本,在第一行暂停 restart 重新执行脚本 cont,c 继续执行,知道遇到下一个断点 next,n 单步执行 step,s 单步执行,并 ...
- node.js—File System(文件系统模块)
文件系统模块概述 该模块是核心模块,提供了操作文件的一些API,需要使用require导入后使用,通过 require('fs') 使用该模块 文件 I/O 是由简单封装的标准 POSIX 函数提供的 ...
- webpack中引入的path[require('path')]是node.js内置的package,用来处理路径的。
http://www.runoob.com/nodejs/nodejs-path-module.html
- node.js(二)各种模块
我们知道Node.js适合于IO密集型应用,不适合于CPU密集型应用. JS和Node.js区别: JS运行于客户端浏览器中,存在兼容性问题:数据类型:值类型+引用类型(ES+D ...
- node的内置常量 __dirname和 __filename
node的内置常量 __ dirname和 __ filename __dirname当前文件(你用node运行的文件)所在的文件夹地址 // dirname.js console.log(__dir ...
- [Node.js与数据库]node-mysql 模块介绍
[Node.js与数据库]node-mysql 模块介绍 转载至:https://itbilu.com/nodejs/npm/NyPG8LhlW.html#multiple-statement-q ...
- node.js 初学(一)—— http fs 服务器/文件/post get
node.js 初学 —— http fs 服务器/文件/post get 这个世界,从来不会给失败者颁奖! 了解 node.js (开源) node.js 是用来做后台开发的,但是现在大部分前端人员 ...
- 4、js内置函数
前言:上一篇我介绍了函数的基本概念,和一些简单的Demo.其实很多函数是js内置的,我们无需自己去写,直接拿过来用即可.内置函数分为全局函数和js内置对象的函数区别:全局函数不属于任何一个内置对象.理 ...
- 4月5日--课堂笔记--JS内置对象
JavaScript 4.5 一. JS内置对象 1.数组Array a)创建语法1:var arr=new Array(参数); i. 没有参数:创建一个初始容量为0的数组 ii. ...
随机推荐
- MFC CDHtmlDialog 加载本地资源
步骤:1.资源视图 项目右击选择资源添加,自定义添加新类型 如:JS(会增加JS文件夹)2. 选择1新建的文件夹右击 添加资源 导入 选择js文件引入3. 在资源文件Resource.h文件夹能找到资 ...
- jq 如何获取多选框选中的值
jquery如何获取多选框选中的值,有两种方法 1.通过id获取是否选中(单个) 1)引入jquery文件 2)Html设计如下 <div> <span>运动类:</sp ...
- Uva LA 3902 - Network 树形DP 难度: 0
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- Standalone的更改方式
1.更改Game视图中的Standalone分辨率 2.在unity中菜单栏中 File---->Build Settings(Ctrl+Shift+B)---->Player Setti ...
- svn服务器搭建及使用(二)
上一篇介绍了VisualSVN Server和TortoiseSVN的下载,安装,汉化.这篇介绍一下如何使用VisualSVN Server建立版本库,以及TortoiseSVN的使用. 首先打开Vi ...
- 5.4 C++重载输入与输出操作符
参考:http://www.weixueyuan.net/view/6382.html 总结: 在C++中,系统已经对左移操作符“<<”和右移操作符“>>”分别进行了重载,使其 ...
- 玩转X-CTR100 l STM32F4 l FPU单精度浮点性能测试
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器如何开启ST ...
- DevExpress WinForms使用教程:新的CheckEdit样式
[DevExpress WinForms v18.2下载] 在最开始CheckEdit控件有16种样式, 使用CheckStyle属性,开发人员可以选择其中一种样式.随着时间推移,与其他Windows ...
- L265 - 5 questions to ask yourself before you ask for a raise or promotion
You’ve been in your role for a while now, giving 110% to every assignment your manager hands out. Yo ...
- ES脑裂问题
脑裂:一个集群中的不同节点对于集群的状态有了不一样的理解 ES集群的总体状态是red,本来9个节点的集群在结果中只显示4个节点在线: 正常情况下,集群中的所有节点应该对集群中的master的选择是一致 ...