nodejs中的fs模块

fs模块为nodejs的核心模块之一,主要处理文件的读写、复制、s删除、重命名等操作。当需要使用该模块时,需要先导入该文件

var fs = require('fs');

nodejs文件系统中的方法均有异步和同步两种版本,例如读取文件内容的函数有异步的fs.readFile()和同步的fs.readFileSync().

fs中的读写操作

文件模块中提供了基本的读写操作、buffer二进制操作和流操作。

基本的读写操作

wirte()和read()方法提供读写操作时,需要执行fs.open(path,flags,[mode],[callback(err,fd)])先打开文件。其中path为文件的路径,flag为打开的方式,可以为r(读)、w(写)(如果文件不存在,则创建),w+(以读写模式打开文件,如果文件不存在,则创建),r+(以读写模式打开文件)、a(以追加模式打开文件,如果文件不存在,则创建),a+(以读取追加模式打开文件,如果文件不存在,则创建。

fs.read(fd,buffer,offset,length,position,callback):其功能为从指定的文件描述符 fd 中读取数据并写入 buffer 指向的缓冲区对象。offset 是buffer 的写入偏移量。length 是要从文件中读取的字节数。position 是文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取。回调函数传递bytesRead 和 buffer,分别表示读取的字节数和缓冲区对象。

fs.write(fd,buffer,offset,length[,position],callback):功能为将buffer内容写入fd中。

fs.readFile(file[,option],callback):读取文件。其中file可以为文件名或文件路径,options可以为对象或字符串。包括读取文件时的编码、文件的读取方式(默认为‘r’);
fs.writeFile(file,data[,options],callback):写入文件。data为写入的内容。options为可选参数,可以为encoding(编码方式)、mode(权限)和flag(文件写的方式,默认为’w’)
fs.appendFile(file,data[,options],callback)在文件的末尾添加内容

如要通过readFile和writeFile实现读取一个文件,并把该文件写入另一个文件中

fs.readFile('test.txt',function(err,data){
    if(err){
        console.log(err)
    }
    fs.writeFile('test1.txt',data,0,'utf8',function(err){
        if(err){
            throw err;
        }
    })
})

fs.createReadStream(path[,options]):以流的形式读取文件,options包括flags、encoding、fd、mode、autoClose、start、end
fs.createWriteStream(path[,options]):以流的形式写入文件,options的值同createWriteStream中的options

var readerStream = fs.createReadStream('test.txt');
var writeStream = fs.createWriteStream('test1.txt');
readerStream.pipe(writeStream).on('error',function(err){
    if(err){
        console.log(err);
    }
    }).on('finish',function(){
    //完成操作
    });

fs检查文件是否存在的方法

fs.stat(path,callback)

该方法用于查询文件信息,其回调函数有两个参数(err, stats)。stats是一个fs.Stats对象,该对象中包含一个stats.isFile()方法。如果stats对象存在且stats.isFile()为true,才能确认要修改或删除的文件存在

fs.stat('test.txt',function(err,stat){
    if(stat && stat.isFile()){
        console.log("文件存在");
    }else{
        console.log('文件不存在或不是标准文件');
    }
})

fs.access(path[,mode],callback)

该方法用于检查到指定path路径的目录或文件的访问权限,其回调函数中有一个参数(Err), 如果检查失败则会出现错误参数的响应。mode为要检查的权限掩码,它可以是以下的值

fs.F_OK - 文件是对于进程是否可见,可以用来检查文件是否存在。也是mode 的默认值
fs.R_OK - 文件对于进程是否可读
fs.W_OK - 文件对于进程是否可写
fs.X_OK - 文件对于进程是否可执行。(Windows系统不可用,执行效果等同fs.F_OK)

使用fs.acess()方法检查文件是否存在,可以使用以下方法

fs.access('test4.txt',function(err){
    console.log(err?'文件不存在':'文件存在');
})

使用fs.access方法检查对文件时候有读写权限,可以使用如下方法:

fs.access("test.txt",fs.R_OK | fs.W_OK,function(err){
    console.log(err?'不可读写':'可读写');
});

监测文件变动

fs.watch(filename [,options] [,listener])可以监测文件的变动情况
fliename为需要监听的文件夹或文件名的路径
options为string或object。可能包含的值为persistent(布尔值,表明当文件监听变化后,是否继续监听,默认值为true)、recursive(布尔值,表明子文件夹是否被监听,默认值为false)、encoding(字符串类型,表明监听文件名的字符编码,默认为‘utf8’

fs.watch('test.txt',function(event,filename){
    console.log(event);
    console.log(filename);
})

当test.txt文件发生变化时,回调函数执行,输出event(change)和filename(test.txt)

fs.watchFile(file[,options],listener)
监听filename的变化,当该文件发生变化时,执行回调函数
这里options的包括:persistent(布尔值)和interval(多少毫秒轮询filename的状态,options的默认值为{persistent: true,interval:5007}

listenter中包含两个arguments,表明文件的当前状态和以前的状态

fs.watchFile('test.txt',function(curr,prev){
    console.log(curr);
    console.log(prev)
})

二者主要用来监听文件变动.fs.watch利用操作系统原生机制来监听,可能不适用网络文件系统; fs.watchFile则是定期检查文件状态变更,适用于网络文件系统,但是相比fs.watch有些慢,因为不是实时机制.

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值