zoukankan      html  css  js  c++  java
  • nodejs 文件系统

    nodejs访问文件系统
     
    所有的文件系统的调用,都需要加载fs模块,即var fs=require('fs');
    nodejs提供的fs模块几乎所有的功能都有两种形式选择:异步和同步,如异步的write()和同步的writeSync()
     
    1.打开和关闭文件
    打开文件:
    fs.open(path,flags,[mode],callback)
    fs.openSync(path,flags,[mode])
    其中path参数指定文件系统的标准路径字符串,flags参数指定打开文件的模式,如读、写、追加等,可选的mode参数设置文件访问模式,默认为0666,表示可读且可写。
    关闭文件:
    fs.close(fd,callback)
    fs.closeSync(fd)
    一个简单的异步模式打开和关闭文件的例子
    fs.open('myFile','w',function(err,fd){
        if(!error){
            fs.close(fd);
        }
    }

    注意:回调函数被指定,并接收err和fd参数,fd参数是你可以用来读取或写入该文件的文件描述符。

    2.写入文件
    fs模块提供了四种方式将数据写入文件
    (1)简单文件写入:
    fs.writeFile(path,data,[options],callback)
    fs.writeFileSync(path,data,[options])
    其中,path参数指定文件的路径,可以是相对或绝对路径,data参数指定将被写入到文件中的String或Buffer对象,可选的options参数是一个对象,它可以包含定义字符串编码,以及打开文件时使用的模式和标志的encoding,mode和flag属性
    一个简单的例子:
    var fs=require('fs');
    var config={
        maxFiles:20,
        maxConnections:15,
        rootPath:'./routes'
    };
    var configTxt=JSON.stringify(config);
    var options={
        encoding:'utf8',
        flag:'w'
    };
    fs.writeFile('config.text',configTxt,options,function(err){
       if(err){
           console.log('config write fail');
       } else{
           console.log('config write success');
       }
    });

    (2)同步和异步文件写入

    fs.writeSync(fd,data,offset,length,position)
    fs.write(fd,data,offset,length,position,callback)
    其中,fd参数是openSync()或open()返回的文件描述符,data参数指定被写入文件中的String或Buffer对象,offset参数指定data参数中开始阅读的索引,如果你想从字符串或缓冲区的当前索引开始,这个值应该为null。lenght参数指定要写入的字节数,你可以指定null,表示一直写到数据缓冲区的末尾。
    举一个异步写入文件的例子:
    var fs=require('fs');
    var fruitBow1=['apple','orange','banana'];
    function writeFruit(fd){
        if(fruitBow1.length){
            var fruit=fruitBow1.pop()+'';
            fs.write(fd,fruit,null,null,function(err,bytes){
                if(err){
                    console.log('File write failed.');
                }else{
                    console.log('write: %s %dbytes',fruit,bytes);
                    writeFruit(fd);   //反复调用,直到fruitBow1的length为0
                }
            });
        }else{
            fs.close(fd);
        }
    }
    fs.open('fruit.txt','w',function(err,fd){
       writeFruit(fd);
    });

    (3)流式文件写入
    往一个文件写入大量数据是,最好的方式之一是使用流,其中包括把文件作为一个Writeable流打开,Writeable流很容易实现,可以使用pipe()方法与Readable流链接,这也使得它很容易写来自Readable流(如HTTP请求)的数据。
    若要将数据异步传送到文件,首先需要创建一个Writeable对象:
    fs.createWriteStream(path,[options])
    其中,path参数指定了文件的路径,可以是相对或绝对路径,可选的options参数是一个对象,它可以包含定义字符串编码以及打开文件时使用模式和标志的encoding,mode和flag属性。一旦打开Writeable文件流,就可以使用标准的流式write(buffer)方法写入它。
    var fs=require('fs');
    var grains=['wheat','rice','oats'];
    var options={encoding:'utf8',flag:'w'};
    var fileWriteStream=fs.createWriteStream('grains.txt',options);
    fileWriteStream.on('close',function(){
        console.log('file closed.');
    });
    while(grains.length){
        var data=grains.pop()+' ';
        fileWriteStream.write(data);
        console.log('write: %s',data);
    }
    fileWriteStream.end();

    三 读取文件
    fs模块提供了四种不同的方法从文件中读取数据。
    (1)简单文件读取:
    fs.readFile(path,[options],callback)
    fs.readFileSync(path,[options])
    其中,path参数指定了文件的路径,可以是相对或绝对路径,可选的options参数是一个对象,它可以包含定义字符串编码以及打开文件时使用模式和标志的encoding,mode和flag属性。
    举个例子:
    var fs=require('fs');
    var options={encoding:'utf8',flag:'r'};
    fs.readFile('config.txt',options,function(err,data){
        if(err){
            console.log('Failes to open config File.');
        }else{
            console.log('config Loaded.');
            var config=JSON.parse(data);
            console.log('Max Files: '+config.maxFiles);
            console.log('maxConnections: '+config.maxConnections);
            console.log('rootPath: '+config.rootPath);
        }
    });

    (2)同步文件读取
    fs.readSync(fd,buffer,offset,length,position)
    (3)异步文件读取
    fs.read(d,buffer,offset,length,position,callback)
    (4)流式文件读取
    首先要使用以下语法创建一个Readable流对象:fs.createReadStream(path,[options])
    var fs=require('fs');
    var options={encoding:'utf8',flag:'r'};
    var fileReadStream=fs.createReadStream('grains.txt',options);
    fileReadStream.on('data',function(chunk){
        console.log('Grains: %s',chunk);
        console.log('read %d bytes of data.',chunk.length);
    });
    fileReadStream.on('close',function(){
        console.log('file closed.');
    });

     
  • 相关阅读:
    Http Requests for PHP
    关于ORA-00979 不是 GROUP BY 表达式错误的解释
    boke例子: freermarker:在使用ajax传递json数据的时候多出冒号
    boke练习: springboot整合springSecurity出现的问题,传递csrf
    boke练习: springboot整合springSecurity出现的问题,post,delete,put无法使用
    feign三:覆写feign的默认配置及feign的日志
    boke练习: spring boot: security post数据时,要么关闭crst,要么添加隐藏域
    boke练习: freemarker对空变量报错 (classic_compatible设置true,解决报空错误)
    mysql查询、子查询、连接查询
    MySQL Group By 实例讲解(二)
  • 原文地址:https://www.cnblogs.com/lyy-2016/p/6691285.html
Copyright © 2011-2022 走看看