异步读取文件

按照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)的更多相关文章

  1. Node.js内置的工具和第三方模块来进行单步调试

    1.命令行调试: Node.js调试命令: run 执行脚本,在第一行暂停 restart 重新执行脚本 cont,c 继续执行,知道遇到下一个断点 next,n 单步执行 step,s 单步执行,并 ...

  2. node.js—File System(文件系统模块)

    文件系统模块概述 该模块是核心模块,提供了操作文件的一些API,需要使用require导入后使用,通过 require('fs') 使用该模块 文件 I/O 是由简单封装的标准 POSIX 函数提供的 ...

  3. webpack中引入的path[require('path')]是node.js内置的package,用来处理路径的。

    http://www.runoob.com/nodejs/nodejs-path-module.html

  4. node.js(二)各种模块

    我们知道Node.js适合于IO密集型应用,不适合于CPU密集型应用.    JS和Node.js区别:         JS运行于客户端浏览器中,存在兼容性问题:数据类型:值类型+引用类型(ES+D ...

  5. node的内置常量 __dirname和 __filename

    node的内置常量 __ dirname和 __ filename __dirname当前文件(你用node运行的文件)所在的文件夹地址 // dirname.js console.log(__dir ...

  6. [Node.js与数据库]node-mysql 模块介绍

    [Node.js与数据库]node-mysql 模块介绍   转载至:https://itbilu.com/nodejs/npm/NyPG8LhlW.html#multiple-statement-q ...

  7. node.js 初学(一)—— http fs 服务器/文件/post get

    node.js 初学 —— http fs 服务器/文件/post get 这个世界,从来不会给失败者颁奖! 了解 node.js (开源) node.js 是用来做后台开发的,但是现在大部分前端人员 ...

  8. 4、js内置函数

    前言:上一篇我介绍了函数的基本概念,和一些简单的Demo.其实很多函数是js内置的,我们无需自己去写,直接拿过来用即可.内置函数分为全局函数和js内置对象的函数区别:全局函数不属于任何一个内置对象.理 ...

  9. 4月5日--课堂笔记--JS内置对象

    JavaScript 4.5 一.    JS内置对象 1.数组Array a)创建语法1:var arr=new Array(参数); i.       没有参数:创建一个初始容量为0的数组 ii. ...

随机推荐

  1. 最新jquery+easyui_api培训文档

    目  录 1 Accordion(可折叠标签) 2 1.1 实例 2 1.2 参数 3 2 DateBox(日期框) 4 2.1 实例 4 2.2 参数 6 2.3 事件 6 2.4 方法 6 3 C ...

  2. 蓝桥杯—ALGO-2 最小最大公倍数

    问题描述已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少. 输入格式输入一个正整数N. 输出格式输出一个整数,表示你找到的最小公倍数.样例输入9样例输出504数据规模与约定1 ...

  3. 蓝桥杯—BASIC-19 完美的代价(贪心)

    问题描述 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的.小龙龙认为回文串才是完美的. 现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串. 交换的定义 ...

  4. linux用户管理 用户和用户组信息

    用户管理配置文件 用户信息文件  /etc/passwd 密码文件 /etc/shadow 用户配置文件 /etc/login.defs /etc/default/useradd 新用户信息文件 /e ...

  5. Win10系列:UWP界面布局基础9

    在XAML中,样式.模板.画笔和动画等都被看做是资源,它们最终的作用都是相同的,就是让设计人员可以使用这些资源创建更好的视觉效果,对其设计的产品外观进行标准化统一,那么如何使用这些资源并组织和重用呢, ...

  6. [Leetcode 392]判断子序列 Is Subsequence

    [思路] 判断s是否为t的子串,所以length(s)<=length(t).于是两个指针,一次循环. 将s.t转换为数组p1.p2. i为过程中s的匹配长度. i=0空串,单独讨论返回true ...

  7. 4.2 C++虚成员函数

    参考:http://www.weixueyuan.net/view/6371.html 总结: virtual关键字仅用于函数声明,如果函数是在类外定义,则不需要再加上virtual关键字了. 在C+ ...

  8. 编译varnish 报No package 'libpcre' found

    pcre的lib目录未指定 假如安装pcre的目录为/usr/local/pcre 那么lib目录为/usr/local/pcre/lib export PKG_CONFIG_PATH=/usr/lo ...

  9. Convert the AScii to SAC file

    readtable *.txt w sac  filename.sac ch delta dela0 w over

  10. Oracle in与exist条件分析

    select ...from user in('a','b','c'):in支持多个条件同时查询