持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情
今天来学习文件系统模块,分别从文件的读取、写入、获取这几点进行说明。
Node.js内置的fs模块就是文件系统模块,用来操作文件。
fs模块同时提供了异步和同步的方法。
//To use this module
const fs = require('fs');
读文件操作
语法格式:
fs.readFile(path[, options], callback)
用来读取指定文件中的内容
参数说明:
- path - 必选参数,表示文件的路径(字符串)。
- options - 可选参数,表示以什么编码格式来读取文件。
- callback - 必选参数,文件读取完成后,通过回调函数拿到读取的结果。
const fs = require('fs');
const path = require('path');
// 获取路径 拼接路径
let strpath = path.join(__dirname,'data.txt');
// 异步操作,根据参数获取文件内容
fs.readFile(strpath,(err,data)=>{
//通过判断err对象是否为null,知晓文件是否读取成功
if(err) return;
console.log(data.toString());
});
// 如果有第二个参数并且是编码,那么回调函数获取到的数据就是字符串
// 如果没有第二个参数,那么得到的就是Buffer实例对象
fs.readFile(strpath,'utf8',(err,data)=>{
if(err) return;
console.log(data);
});
// 同步操作 根据返回值获取文件内容
let ret = fs.readFileSync(strpath,'utf8');
console.log(ret);
写文件操作
语法格式:
fs.writeFile(file, data[, options], callback)
向指定的文件路径中,写入文件内容
参数说明:
- path - 文件名或文件路径。
- data - 要写入文件的数据,可以是 String(字符串) 或 Buffer(缓冲) 对象。
- options - 该参数是一个对象,其中有 encoding(编码,默认值为utf8)、flag(标识位,默认值为w) 和 mode(权限位,默认值为0o666)
- callback - 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。
如果写入的数据是String,默认按UTF-8编码写入文本文件,如果传入的参数是
Buffer,则写入的是二进制文件。
const fs = require('fs');
const path = require('path');
let strpath = path.join(__dirname,'data.txt');
fs.writeFile(strpath,'hello nihao',(err)=>{
if(!err){
console.log('文件写入成功');
}
});
// 将字符串转为Buffer
let buf = Buffer.from('hi');
fs.writeFile(strpath,buf,(err)=>{
if(!err){
console.log('文件写入成功');
}
});
// 同步操作
fs.writeFileSync(strpath,'tom and jerry');
引申的知识点:Buffer
Buffer对象是Node处理二进制数据的一个接口。它是Node原生提供的全局对象,可以直接使用,不需要require(‘buffer’)。
实例化
Buffer.from(array)
Buffer.from(string)
Buffer.alloc(size)
功能方法
Buffer.isEncoding() 判断是否支持该编码
Buffer.isBuffer() 判断是否为Buffer
Buffer.byteLength() 返回指定编码的字节长度,默认utf8
Buffer.concat() 将一组Buffer对象合并为一个Buffer对象
实例方法
write() 向buffer对象中写入内容
slice() 截取新的buffer对象
toString() 把buf对象转成字符串
toJson() 把buf对象转成json形式的字符串
文件信息获取
异步模式获取文件或目录的详细信息(文件大小,创建时间等)
语法格式:
fs.stat(path, callback)
参数说明:
path - 文件路径。
callback - 回调函数,带有两个参数如:(err, stats), stats 是 fs.Stats 对象。
stat的一些属性说明
atime 文件访问时间
ctime 文件的状态信息发生变化的时间(比如文件的权限)
mtime 文件数据发生变化的时间
birthtime 文件创建的时间
可以通过stats类中的提供方法判断文件的相关属性
//异步操作
fs.stat('./abc',(err,stat) => {
// 一般回调函数的第一个参数是错误对象,如果err为null,表示没有错误,否则表示报错了
if(err) return;
//stats类中的方法: isFile() 如果是文件返回 true; isDirectory() 如果是目录返回 true
if(stat.isFile()){
console.log('文件');
}else if(stat.isDirectory()){
console.log('目录');
}
console.log(stat);
});
// 同步操作
let ret = fs.statSync('./data.txt');
console.log(ret);