Node.js的文件系统模块(File System)

Node.js的文件系统模块(File System)

File System - 文件系统模块 - requires(‘fs’)

这是node的一个核心模块,提供了操作文件的一系列API,需要使用require导入后使用。

本文将结合示例介绍node.js中文件系统模块的一系列的相对比较重要且常用的方法。

1. fs.open(path,flags,[mode],callback) , 异步打开文件。

参数:

    path:要打开的文件的路径

    flags:打开文件的方式:读/写

    mode:设置文件的模式:读/写/执行 4/2/1 0777

    callback(err,fd):回调函数,带两个参数: 

        err——保存打开文件失败时的信息,如果文件打开成功则为null

        fd-被打开的文件的标识

flags参数选项:

r   以读取模式打开文件。如果文件不存在抛出异常。
r+  以读写模式打开文件。如果文件不存在抛出异常。
rs  以同步的方式读取文件。
rs+ 以同步的方式读取和写入文件。
w   以写入模式打开文件,如果文件不存在则创建。
wx  类似 'w',但是如果文件路径存在,则文件写入失败。
w+  以读写模式打开文件,如果文件不存在则创建。
wx+ 类似 'w+', 但是如果文件路径存在,则文件读写失败。
a   以追加模式打开文件,如果文件不存在则创建。
ax  类似 'a', 但是如果文件路径存在,则文件追加失败。
a+  以读取追加模式打开文件,如果文件不存在则创建。
ax+ 类似 'a+', 但是如果文件路径存在,则文件读取追加失败。

示例:
1.txt文件内容:

hello ,this is Cynthia .

fs.js文件:

    var fs = require('fs');
    fs.open('1.txt','r',function (err,fd) {
        //console.log(err); //null ,成功打开了文件
        // console.log(fd); //3
        if(err){
            console.log('文件打开失败!');
        }else{
            console.log('文件打开成功!');
        }
    });

2. fs.openSync(path,flags,[mode]) , 同步打开文件。

示例:

    var fs = require('fs');
    var fd = fs.openSync('1.txt','r');
    console.log(fd); //3

3.fs.read(fd,buffer,offset,length,position,callback) , 从指定的文档标识开始异步的读取文件数据。

参数:
    fd:通过open成功打开文件时文件的标识。

    buffer:buffer对象。

    offset:偏移量,表示文件读取到的内容存到buffer对象时,从buffer对象的那个位置开始存,即新的内容添加到buffer中的起始位置。

    length:读取文件的内容的长度,即添加到buffer中的内容的长度。

    position:表示从文件的哪个地方开始读取文件的内容。

    callbackerr,冷,nbf):回调函数,带三个参数: 

        err——保存打开文件失败时的信息,如果文件打开成功则为null

        len-buffer的长度

        nbf-buffer内容

示例:

    var fs = require('fs');
    fs.open('1.txt','r',function (err,fd) {
        if(err){
            console.log('文件打开失败!');
        }else{ //读取文件
            var buf = new Buffer(20); //读取到的文件内容将存在这个buffer对象中
            console.log(buf); //<Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00>
            fs.read(fd,buf,1,4,null,function (err1,len,nbf) {
                console.log(buf); //<Buffer 00 68 65 6c 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00>
                console.log(err1); //null
                console.log(len); //4
                console.log(nbf); //<Buffer 00 68 65 6c 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00>
            });
        }
    });

4. fs.readSync(fd,buffer,offset,length,position) , 从指定的文档标识开始同步的读取文件数据。

5.fs.write(fd,buffer,offset,length,position,callback) ,通过文件表示fd,向指定的文件写入buffer。

参数:

    fd:打开的文件。

    buffer:要写入的数据。

    offset:buffer对象中要写入的数据的起始位置。

    length:要写入的buffer数据的长度。

    position:fd中的起始位置。

    callback(err,len,nbf):回调函数,带三个参数: 

        err——保存打开文件失败时的信息,如果文件打开成功则为null

        len-写入buffer的长度

        nbf-写入buffer内容

示例:

var fs = require('fs');
    fs.open('1.txt','r+',function (err,fd) {
        if(err){
            console.log('文件打开失败!');
        } else{
            var buf1 = new Buffer('how are you ?');
            fs.write(fd,buf1, 0,buf1.length,25,function () {
                console.log(arguments); //{ '0': null, '1': 13, '2': <Buffer 68 6f 77 20 61 72 65 20 79 6f 75 20 3f> }
             });
        }
    });

1.txt文件的内容变化:
这里写图片描述

6. fs.write(fd, data[,position[,encoding]], callback) ,通过指定的fd把data写入到文档中,如果data不是buffer对象,则会把值强制转化成一个字符串。

7. fs.writeSync(fd, buffer, offset, length[,position]) ,fs.write()的同步版本

8. fs.writeSync(fd, data[,position[,encoding]]) ,fs.write()的同步版本

9. fs.close(fd, callback) , 关闭一个打开的文件。

10. fs.closeSync(fd) ,fs.close()的同步版本。

示例:

    var fs = require('fs');
    fs.open('1.txt','r+',function (err,fd) {
       if(err){
            console.log('文件打开失败!');
       } else{
            fs.write(fd, 'I am fine , thanks .', 25);
            fs.close(fd,function () {
                //这里面可以重新打开文件再进行操作等
            });
    }

1.txt文件内容变化:
这里写图片描述

11.fs.writeFile(filename, data [,option], callback) ,异步的将数据写入一个文件,如果文件不存在就新建,如果文件原来已经存在,则会被替换,data可以是string,也可以是buffer。

callback(e):回调函数,带一个参数,表示保存文件写入的结果,成功时为null。

12. fs.writeFileSync(filename, data, [,option]) ,fs.writeFie()的同步版本。

示例:异步写文件

var fs = require('fs');
    var filename = '2.txt';  //2.txt文件原来不存在
    fs.writeFile(filename, 'hello', function () {
        console.log(arguments); //{ '0': null }
    });

13. fs.appendFile(filename, data, [,option], callback) ,异步的将数据添加到一个文件的末尾,如果文件不存在,会新建一个文件,data可以是string,也可以是buffer。

14. fs.appendFileSync(filename, data, [,option]) , fs.appendFile()的同步版本。

示例:

    var fs = require('fs');
    var filename = '2.txt';  //2.txt文件在上一个演示例子中创建了

    fs.appendFile(filename, ' world' ,function () {
        console.log(arguments);
    });

15. fs.exits(path, callbakc) ,检查指定路径的文件或者目录是否存在。

callback(e):回调函数,带一个参数,文件存在时为true,不存在时为false。

186. fs.exitsSync(path) ,fs.exits()的同步版本。

示例:判断一个文件是否存在,存在时追加问价内容,不存在则创建。

     //异步模式
    var fs = require('fs');
    var filename = '2.txt';
    fs.exists(filename,function (err) { //判断文件是否存在
        console.log(err); //true表示存在,false表示不存在
        if(!err){ //文件不存在
            fs.writeFile(filename,'hello',function (e) {
                if(e){
                    console.log('创建文件出错了!');
                }else{
                    console.log('创建文件成功!');
                }
            });
        }else{ //文件存在
            fs.appendFile(filename, ' world',function (er) {
                if(er){
                    console.log('添加文件内容失败!');
                }else{
                    console.log('添加文件内容成功!');
                }
            });
        }
    });

    //同步模式
    var fs = require('fs');
    var filename = '3.txt';
    if(!fs.existsSync(filename)){
        fs.writeFileSync(filename,'hello');
        console.log('新文件创建成功!');
    }else{
        fs.appendFileSync(filename, ' world');
        console.log('追加文件内容成功!')
    }

17. fs.readFile(filename, [option], callback) ,异步读取一个文件的全部内容。

callback(err,data):回调函数,带2个参数,err表示是否读取到文件,成功时err为null,data表示读取的文件内容。

18. fs.readFileSync(filename, [option]) ,fs.readFile()的同步版本。

示例:

    var fs = require('fs');
    fs.readFile('2.txt', function (err,data) {
        console.log(arguments);
        if(err){
            console.log('读文件内容失败!');
        }else{
            console.log(data.toString()); //输出读到的2.txt文件的内容
        }
    });

19. fs.unlink(path, callback) ,删除一个文件。

callback(err),回调函数,带一个参数,err为null时表示成功删除,否则err保存删除失败的信息。

20. fs,unlinkSync(path) , fs.unlink()的同步版本。

示例:

    fs.unlink('1.txt', function (err) {
        if(err){
            console.log('删除失败!');
        }else{
            console.log('删除成功!');
        }
     console.log(err); //(删除成功!) null
    });

21. fs.rename(oldPath,newPath,callback) ,重命名文件。

callback(err),回调函数,带一个参数,成功重命名文件时,err为null。

22. fs.renameSync(oldPath,newPath) ,fs.rename()的同步版本。

示例:

    fs.rename('2.txt','2.new.txt',function () {
        console.log(arguments);
    });

23. fs.stat(path, callback) ,读取文件信息。

24. fs.statSync(path,callback) ,fs.stat()的同步版本。

callback(err,stats):回调函数,成功时候,err为null,stats保存文件的属性信息。

示例:

    fs.stat('1.txt', function (err,stats) {
        console.log(err);
        console.log(stats);
    });

stats类中的方法有:

stats.isFile()  如果是文件返回 true,否则返回 false。

stats.isDirectory() 如果是目录返回 true,否则返回 false。

stats.isBlockDevice()   如果是块设备返回 true,否则返回 false。

stats.isCharacterDevice()   如果是字符设备返回 true,否则返回 false。

stats.isSymbolicLink()  如果是软链接返回 true,否则返回 false。

stats.isFIFO()  如果是FIFO,返回true,否则返回 false。FIFO是UNIX中的一种特殊类型的命令管道。

stats.isSocket()    如果是 Socket 返回 true,否则返回 false。

25. fs.watch(filename, [option], [listener]) ,观察指定路径的改变,filename路径可以是文件也可以是目录。

示例:监听文件状态的变化

    var filename = '1.txt';
    fs.watch(filename, function (ev,fn) {
        console.log(ev);
        if(fn){ //判断fn事件是否支持
            console.log(fn + '发生了改变');
        }else{
            console.log('......');
        }
    });

26. fs.mkdir(path,[mode],callback) ,创建一个文件夹。

27. fs.mkdirSync(path,[mode]) ,fs.mkdir()的同步版本。

28. fs.rmdir(path, callback) ,删除一个文件夹。

29. fs.rmdirSync(path) , fs.rmdir()的同步版本。

示例:

    //创建文件夹
    fs.mkdir('./1', function () {
        console.log(arguments); //{ '0': null }
    });
    //删除文件夹
    fs.rmdir('./2', function () {
        console.log(arguments); //{ '0': null }
    });

30. fs.readdir(path, callback) ,读取文件夹。

callback(err,fileList):回调函数,包含2个参数,成功读取到文件夹时,err为null,fileList是一个数组,保存读取到的文件夹下的所有文件和文件夹。

31. fs.readSync(path) ,fs.read()的同步版本。

示例1:

    fs.readdir('../fs', function (err,fileList) {
        console.log(err);
        console.log(fileList); //fileList是一个数组,存储读取目录下的全部文件、文件夹
    });

示例2:列出指定目录下的文件,并指出是文件还是文件夹等。

    fs.readdir('../fs', function (err,fileList) {
        fileList.forEach(function (f) {
            fs.stat(f,function (err, info) {
                    //console.log(arguments);
                switch (info.mode){
                    case 16822:
                        console.log('[文件夹] ' + f);
                        break;
                    case 33206:
                        console.log('[文件] ' + f);
                        break;
                    default:
                        console.log('其它文件 ' + f);
                        break;
                }
            });
        });
    });

ps:如若对本文还有任何的意见或建议,欢迎联系本人或留言。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

英子的搬砖日志

您的鼓励是我创作的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值