nodejs 文件系统

释放双眼,带上耳机,听听看~!

nodejs访问文件系统

 

所有的文件系统的调用,都需要加载fs模块,即var fs=require('fs');

nodejs提供的fs模块几乎所有的功能都有两种形式选择:异步和同步,如异步的write()和同步的writeSync()

 

1.打开和关闭文件

打开文件:


1
2
3
1fs.open(path,flags,[mode],callback)
2fs.openSync(path,flags,[mode])
3

其中path参数指定文件系统的标准路径字符串,flags参数指定打开文件的模式,如读、写、追加等,可选的mode参数设置文件访问模式,默认为0666,表示可读且可写。

关闭文件:


1
2
3
1fs.close(fd,callback)
2fs.closeSync(fd)
3

一个简单的异步模式打开和关闭文件的例子


1
2
3
4
5
6
1fs.open('myFile','w',function(err,fd){
2    if(!error){
3        fs.close(fd);
4    }
5}
6

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

 

2.写入文件

fs模块提供了四种方式将数据写入文件

(1)简单文件写入:


1
2
3
1fs.writeFile(path,data,[options],callback)
2fs.writeFileSync(path,data,[options])
3

其中,path参数指定文件的路径,可以是相对或绝对路径,data参数指定将被写入到文件中的String或Buffer对象,可选的options参数是一个对象,它可以包含定义字符串编码,以及打开文件时使用的模式和标志的encoding,mode和flag属性

一个简单的例子:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1var fs=require('fs');
2var config={
3    maxFiles:20,
4    maxConnections:15,
5    rootPath:'./routes'
6};
7var configTxt=JSON.stringify(config);
8var options={
9    encoding:'utf8',
10    flag:'w'
11};
12fs.writeFile('config.text',configTxt,options,function(err){
13   if(err){
14       console.log('config write fail');
15   } else{
16       console.log('config write success');
17   }
18});
19

nodejs 文件系统

nodejs 文件系统

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


1
2
3
1fs.writeSync(fd,data,offset,length,position)
2fs.write(fd,data,offset,length,position,callback)
3

其中,fd参数是openSync()或open()返回的文件描述符,data参数指定被写入文件中的String或Buffer对象,offset参数指定data参数中开始阅读的索引,如果你想从字符串或缓冲区的当前索引开始,这个值应该为null。lenght参数指定要写入的字节数,你可以指定null,表示一直写到数据缓冲区的末尾。

举一个异步写入文件的例子:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1var fs=require('fs');
2var fruitBow1=['apple','orange','banana'];
3function writeFruit(fd){
4    if(fruitBow1.length){
5        var fruit=fruitBow1.pop()+'';
6        fs.write(fd,fruit,null,null,function(err,bytes){
7            if(err){
8                console.log('File write failed.');
9            }else{
10                console.log('write: %s %dbytes',fruit,bytes);
11                writeFruit(fd);   //反复调用,直到fruitBow1的length为0
12            }
13        });
14    }else{
15        fs.close(fd);
16    }
17}
18fs.open('fruit.txt','w',function(err,fd){
19   writeFruit(fd);
20});
21

nodejs 文件系统

(3)流式文件写入

往一个文件写入大量数据是,最好的方式之一是使用流,其中包括把文件作为一个Writeable流打开,Writeable流很容易实现,可以使用pipe()方法与Readable流链接,这也使得它很容易写来自Readable流(如HTTP请求)的数据。

若要将数据异步传送到文件,首先需要创建一个Writeable对象:


1
2
1fs.createWriteStream(path,[options])
2

其中,path参数指定了文件的路径,可以是相对或绝对路径,可选的options参数是一个对象,它可以包含定义字符串编码以及打开文件时使用模式和标志的encoding,mode和flag属性。一旦打开Writeable文件流,就可以使用标准的流式write(buffer)方法写入它。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
1var fs=require('fs');
2var grains=['wheat','rice','oats'];
3var options={encoding:'utf8',flag:'w'};
4var fileWriteStream=fs.createWriteStream('grains.txt',options);
5fileWriteStream.on('close',function(){
6    console.log('file closed.');
7});
8while(grains.length){
9    var data=grains.pop()+' ';
10    fileWriteStream.write(data);
11    console.log('write: %s',data);
12}
13fileWriteStream.end();
14

nodejs 文件系统

 

三 读取文件

fs模块提供了四种不同的方法从文件中读取数据。

(1)简单文件读取:


1
2
3
1fs.readFile(path,[options],callback)
2fs.readFileSync(path,[options])
3

其中,path参数指定了文件的路径,可以是相对或绝对路径,可选的options参数是一个对象,它可以包含定义字符串编码以及打开文件时使用模式和标志的encoding,mode和flag属性。

举个例子:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
1var fs=require('fs');
2var options={encoding:'utf8',flag:'r'};
3fs.readFile('config.txt',options,function(err,data){
4    if(err){
5        console.log('Failes to open config File.');
6    }else{
7        console.log('config Loaded.');
8        var config=JSON.parse(data);
9        console.log('Max Files: '+config.maxFiles);
10        console.log('maxConnections: '+config.maxConnections);
11        console.log('rootPath: '+config.rootPath);
12    }
13});
14

nodejs 文件系统

nodejs 文件系统

(2)同步文件读取


1
2
1fs.readSync(fd,buffer,offset,length,position)
2

(3)异步文件读取


1
2
1fs.read(d,buffer,offset,length,position,callback)
2

(4)流式文件读取

首先要使用以下语法创建一个Readable流对象:fs.createReadStream(path,[options])


1
2
3
4
5
6
7
8
9
10
11
1var fs=require('fs');
2var options={encoding:'utf8',flag:'r'};
3var fileReadStream=fs.createReadStream('grains.txt',options);
4fileReadStream.on('data',function(chunk){
5    console.log('Grains: %s',chunk);
6    console.log('read %d bytes of data.',chunk.length);
7});
8fileReadStream.on('close',function(){
9    console.log('file closed.');
10});
11

nodejs 文件系统

nodejs 文件系统

 

 

 

转载于:https://www.cnblogs.com/lyy-2016/p/6691285.html

给TA打赏
共{{data.count}}人
人已打赏
安全技术

DES 加密 解密

2021-8-18 16:36:11

安全技术

C++ 高性能服务器网络框架设计细节

2022-1-11 12:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索