nodejs 文件系统

Posted 李月云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.\');
});

 

 

 

以上是关于nodejs 文件系统的主要内容,如果未能解决你的问题,请参考以下文章

javascript 用于在节点#nodejs #javascript内设置react app的代码片段

NodeJs GraphQL 片段解析器

通过nodejs 服务器读取HTML文件渲染到页面

NodeJS模块系统

Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段

Java itext为pdf 文件添加水印核心功能代码片段