fs(文件系统——文件操作)

读取文件:

const fs = require("fs");

// 异步读取
fs.readFile('a.js', function (err, data) {
   console.log(data.toString());
});

// 同步读取
let data = fs.readFileSync('a.js');
console.log(data.toString());

写入文件 :

const fs = require("fs");

//追加写入
fs.writeFile('a.js', '我是内容', {flag:'a'}, function(err) {
    console.log("写入完成");
});

//覆盖写入
fs.writeFile('a.js', '我是内容', {flag:'w'}, function(err) {
    console.log("写入完成");
});

 获取文件状态对象:

const fs = require("fs");

fs.stat('a.js', function (err, stats) {
    console.log('文件状态对象',stats); 
    stats.atimeMs
    // 表明上次访问此文件的时间戳,以 POSIX 纪元以来的毫秒数表示。

    stats.mtimeMs
    // 表明上次修改此文件的时间戳,以 POSIX 纪元以来的毫秒数表示。

    stats.ctimeMs
    // 表明上次更改文件状态的时间戳,以 POSIX 纪元以来的毫秒数表示。

    stats.birthtimeMs
    // 表明此文件的创建时间的时间戳,以 POSIX 纪元以来的毫秒数表示。

    stats.atime
    // 表明上次访问此文件的时间戳。

    stats.mtime
    // 表明上次修改此文件的时间戳。

    stats.ctime
    // 表明上次更改文件状态的时间戳。

    stats.birthtime
    // 表示此文件的创建时间的时间戳。
});

监听文件(是否改变):

const fs = require('fs');

//监听文件:
fs.watch('a.text',(eventType,fileName)=>{
    console.log("文件修改即触发本回调函数");
});

//监听目录:{recursive:true}表示监听该目录和子孙目录,还有它们的文件
fs.watch('目录名', {recursive:true}, (eventType,fileName)=>{
    console.log("本目录和子孙目录有增删文件,或它们的文件有修改,都会触发本回调函数");
});

//监听文件:
fs.watchFile('a.text', {persistent:true}, (current,previous)=>{
    console.log('当前的文件状态对象',current);
    console.log('改变前的文件状态对象',previous);
})

删除文件:

const fs = require('fs');

fs.unlink('a.js', (err)=>{
    console.log('删除完成');
})

如果要读取文件中指定字节的内容,则需要以下更复杂的操作:

1、打开文件,获取“文件描述符”:fs.open(path, flags[, mode], callback);

2、在打开文件的回调函数中,用“文件描述符”读取文件指定的内容:fs.read(fd, buffer, offset, length, position, callback);

举个栗子:

//比如:a.text,文件内容:abcdefg hijklmn opqrst uvwxyz
const fs = require('fs');

function open(){
    return new Promise(res=>{
        fs.open('a.text','r',(err,fd)=>{
            res(fd);
        });
    });
}
function read(fd){
    return new Promise(res=>{
        fs.read(fd, Buffer.alloc(15), 0, 15, null, (err,bytesRead,buffer)=>{
            res(buffer);
        });
//fs.read(文件描述符, 空缓冲器, 读取到的数据从缓冲器0索引处开始写入, 读取文件15字节, 从文件何处开始读取, (err, 读取到的字节数, 存有读取数据的缓冲器)=>{});
    });
}

(async ()=>{
    let fd = await open();
    let bf1 = await read(fd);
    let bf2 = await read(fd);
    fs.close(fd, err=>{});  //关闭打开的文件
    console.log(bf1.toString()); //abcdefg hijklmn
    console.log(bf2.toString()); // opqrst uvwxyz
})();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值