Node.js内置的fs模块就是文件系统模块,负责读写文件。
- 和所有其它JavaScript模块不同的是,fs模块同时提供了异步和同步的方法。
异步读取文件 => readFile()
-
读取一个文本文件
'use strict' let fs = require('fs') fs.readFile('sample.txt', 'utf-8', function(err, data) { if (err) { console.log(err) } else { console.log(data) } }) -
读取一个二进制文件
'use strict' let fs = require('fs') fs.readFile('sample.jpg', function(err, data) { if (err) { console.log(err) } else { let text = data.toString('utf-8') console.log(text) console.log(data.length + 'bytes') } })
当读取二进制文件时,不传入文件编码时,回调函数的data参数将返回一个Buffer对象。在Node.js中,Buffer对象就是一个包含零个或任意个字节的数组(注意和Array不同)。
Buffer对象可以和String作转换
// Buffer -> String
var text = data.toString('utf-8');
console.log(text);
// String -> Buffer
var buf = Buffer.from(text, 'utf-8');
console.log(buf)
同步读取文件 => readFileSync()
-
同步读取文件发生错误,则需要用try...catch捕获该错误:
'use strcit' let fs = require('fs') try { let data = fs.readFileSync('sample.txt', 'utf-8') console.log(data) } catch (err) { console.log(err) }
写文件 => writeFile()
'use strict'
let fs = require('fs')
let data = 'Node.js1.0'
fs.writeFile('output.txt', data, function(err) {
if (err) {
console.log(err)
} else {
console.log('执行完成')
}
})
同步写文件 =>writeFileSync()
'use strict'
let fs = require('fs')
let data = 'Syncwirte Node.js'
try {
fs.writeFileSync('outputsync.txt', data)
console.log('执行完成')
} catch (err) {
console.log(err)
}
- 执行写文件的方法时,如果指定的文件不存在的话,便会自动创建这个文件并写入指定数据
stat
如果我们要获取文件大小,创建时间等信息,可以使用fs.stat(),它返回一个Stat对象,能告诉我们文件或目录的详细信息:
'use strict'
const fs = require('fs')
fs.stat('output.txt', function(err, stat) {
if (err) {
console.log(err)
} else {
// 是否是文件:
console.log('isFile: ' + stat.isFile());
// 是否是目录:
console.log('isDirectory: ' + stat.isDirectory());
if (stat.isFile()) {
// 文件大小:
console.log('size: ' + stat.size);
// 创建时间, Date对象:
console.log('birth time: ' + stat.birthtime);
// 修改时间, Date对象:
console.log('modified time: ' + stat.mtime);
}
}
})
这里卿洋
愿喜❤️