重学Node.js系列(四)

166 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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);