Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine
Node.js® 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境
Buffer 缓冲区文档
Buffer 的结构与数组类似,操作方法也与数组类似
数组不能存储二进制文件,Buffer 是专门存储二进制数据的
Buffer 存储的是二进制数据,显示时以 16 进制的形式显示
Buffer 每一个元素范围是 00~ff,即 011111111
255、00000000
每一个元素占用一个字节内存
Buffer 是对底层内存的直接操作,因此大小一旦确定就不能修改
Buffer 常用方法:
Buffer.from(str[, encoding])
:将一个字符串转换为 BufferBuffer.alloc(size)
:创建指定大小的 BufferBuffer.alloUnsafe(size)
:创建指定大小的 Buffer,可能包含敏感数据(分配内存时不会清除内存残留的数据)buf.toString()
:将 Buffer 数据转为字符串var str = 'Hello前端'
var buf = Buffer.from(str)
// 占用内存的大小,一个汉字3字节 13
console.log(buf.length)
// 字符串的长度 7
console.log(str.length)
// 8进制输出第一个元素 145
console.log(buf[1].toString(8))
//创建一个10个字节的buffer
var buf2 = Buffer.alloc(10)
//通过索引,来操作buf中的元素
buf2[0] = 88
buf2[1] = 255
buf2[2] = 0xaa
buf2[3] = 255
var buf3 = Buffer.allocUnsafe(10)
console.log(buf3)
打开模式:
语法格式:
fs.readFile(path[, options], callback)
path
:文件路径options
:配置选项,若是字符串则指定编码格式
encoding
:编码格式flag
:打开方式callback
:回调函数
err
:错误信息data
:读取的数据,如果未指定编码格式则返回一个 Bufferconst fs = require('fs')
fs.readFile('./files/1.txt', 'utf-8', function(err, data) => {
if(err) {
return console.log('failed!' + err.message)
}
console.log('content:' + data)
})
// 复制文件内容
fs.readFile("C:/Users/笔记.mp3", function(err, data) {
if(!err) {
console.log(data);
// 将data写入到文件中
fs.writeFile("C:/Users/hello.jpg", data, function(err){
if(!err){
console.log("文件写入成功");
}
} );
}});
var fs = require('fs')
// 创建一个可读流
var rs = fs.createReadStream('C:/Users/笔记.mp3')
// 创建一个可写流
var ws = fs.createWriteStream('a.mp3')
// 监听流的开启和关闭
// 这几个监听不是必须的
rs.once('open', function () {
console.log('可读流打开了~~')})
rs.once('close', function () {
console.log('可读流关闭了~~')
//数据读取完毕,关闭可写流
ws.end()})
ws.once('open', function () {
console.log('可写流打开了~~')})
ws.once('close', function () {
console.log('可写流关闭了~~')})
//要读取一个可读流中的数据,要为可读流绑定一个data事件,data事件绑定完毕自动开始读取数据
rs.on('data', function (data) {
console.log(data)
//将读取到的数据写入到可写流中
ws.write(data)})
简便方式:
var fs = require('fs')
var rs = fs.createReadStream('C:/Users/lilichao/Desktop/笔记.mp3')
var ws = fs.createWriteStream('b.mp3')// pipe()可以将可读流中的内容,直接输出到可写流中
rs.pipe(ws)
语法格式:
fs.writeFile(file, data[, options], callback)
file
:文件路径data
:写入内容options
:配置选项,包含 encoding, mode, flag
;若是字符串则指定编码格式callback
:回调函数const fs = require('fs')
fs.writeFile('./files/2.txt', 'Hello Nodejs', function (err) {
if (err) {
return console.log('failed!' + err.message)
}
console.log('success!')})
fs.writeFile('C:/Users/hello.txt', '通过 writeFile 写入的内容', { flag: 'w' }, function (err) {
if (!err) {
console.log('写入成功!')
} else {
console.log(err)
}})
// 同步、异步、简单文件的写入都不适合大文件的写入,性能较差,容易导致内存溢出var fs = require('fs')// 创建一个可写流var ws = fs.createWriteStream('hello3.txt')ws.once('open', function () { console.log('流打开了~~')})ws.once('close', function () { console.log('流关闭了~~')})// 通过ws向文件中输出内容ws.write('通过可写流写入文件的内容')ws.write('1')ws.write('2')ws.write('3')ws.write('4')// 关闭流ws.end()
__dirname
./
或 ../
开头的相对路径时,容易出现路径动态拼接错误的问题__dirname
获取文件所处的绝对路径fs.readFile(__dirname + '/files/1.txt', 'utf8', function(err, data) { ...})
验证路径是否存在:
fs.exists(path, callback)
fs.existsSync(path)
获取文件信息:
fs.stat(path, callback)
fs.stat(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)
重命名文件和目录:
fs.rename(oldPath, newPath, callback)
fs.renameSync(oldPath, newPath)
监视文件更改:
fs.watchFile(filename[, options], listener)