Nodejs读写文件
生活随笔
收集整理的這篇文章主要介紹了
Nodejs读写文件
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1 一.直接操作文件
2 最簡(jiǎn)單的兩個(gè)fs.readFile和fs.writeFile
3 舉例:這個(gè)程序的功能是將一個(gè)比較大json格式的文件轉(zhuǎn)換成你想自己要格式的文件。
4 var fs = require('fs');
5 fs.readFile('./json.json',function(err,data){
6 if(err) throw err;
7
8 var jsonObj = JSON.parse(data);
9 var space = ' ';
10 var newLine = '\n';
11 var chunks = [];
12 var length = 0;
13
14 for(var i=0,size=jsonObj.length;i<size;i++){
15 var one = jsonObj[i];
16 //what value you want
17 var value1 = one['value1'];
18 var value2 = one['value2'];
19 ....
20 var value = value1 +space+value2+space+.....+newLine;
21 var buffer = new Buffer(value);
22 chunks.push(buffer);
23 length += buffer.length;
24 }
25
26 var resultBuffer = new Buffer(length);
27 for(var i=0,size=chunks.length,pos=0;i<size;i++){
28 chunks[i].copy(resultBuffer,pos);
29 pos += chunks[i].length;
30 }
31
32 fs.writeFile('./resut.text',resultBuffer,function(err){
33 if(err) throw err;
34 console.log('has finished');
35 });
36
37 });
38 它的原理是將文件數(shù)據(jù)一次性全部讀入內(nèi)存,優(yōu)點(diǎn)就是接下來(lái)都是在內(nèi)存的操作,速度會(huì)很快。但缺點(diǎn)也很明顯,就是當(dāng)文件非常大時(shí),會(huì)造成內(nèi)存溢出。
39 二. 使用文件流
40 2.1 讀取文件,api相見(jiàn):fs.createReadSream 和 fs.createWriterStream
41 以下代碼實(shí)現(xiàn)的功能就是通過(guò)文件流來(lái)實(shí)現(xiàn)圖片的復(fù)制:
42 var fs = require('fs');
43 var rOption = {
44 flags : 'r',
45 encoding : null,
46 mode : 0666
47 }
48
49 var wOption = {
50 flags: 'a',
51 encoding: null,
52 mode: 0666
53 }
54
55 var fileReadStream = fs.createReadStream('./myjpg.jpg',rOption);
56 var fileWriteStream = fs.createWriteStream('./new_myjpg.jpg',wOption);
57
58 fileReadStream.on('data',function(data){
59 fileWriteStream.write(data);
60
61 });
62
63 fileReadStream.on('end',function(){
64 console.log('readStream end');
65 fileWriteStream.end();
66 });
67 這里再補(bǔ)充在流中非常有用的一個(gè)函數(shù):pipe,它以用來(lái)把當(dāng)前的可讀流和另外一個(gè)可寫(xiě)流連接起來(lái)??勺x流中的數(shù)據(jù)會(huì)被自動(dòng)寫(xiě)入到可寫(xiě)流中。使用起來(lái)非常方便,依然實(shí)現(xiàn)上例中的功能:
68 var fs = require('fs');
69
70 var fileReadStream = fs.createReadStream('./myjpg.jpg');
71 var fileWriteStream = fs.createWriteStream('./new_myjpg.jpg');
72 fileReadStream.pipe(fileWriteStream);
73
74 fileWriteStream.on('close',function(){
75 console.log('copy over');
76 });
77 用這個(gè)函數(shù)可以輕松地實(shí)現(xiàn)一個(gè)靜態(tài)資源服務(wù)器:
78 var http = require("http");
79 var fs = require("fs"),
80 var path = require("path"),
81 var url = require("url");
82
83 var server = http.createServer(function(req, res) {
84 var pathname = url.parse(req.url).pathname;
85 console.log(pathname);
86 var filepath = path.join("./tmp", "wwwroot", pathname);
87 console.log(filepath);
88 var stream = fs.createReadStream(filepath, {flags : "r", encoding : null});
89 stream.on("error", function() {
90 res.writeHead(404);
91 res.end();
92 });
93 stream.pipe(res);
94 });
95 server.on("error", function(error) {
96 console.log(error);
97 });
98 server.listen(8088,function(){
99 console.log('server listen on 8088');
100 });
?
轉(zhuǎn)載于:https://www.cnblogs.com/ference/p/3989165.html
總結(jié)
以上是生活随笔為你收集整理的Nodejs读写文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 30款最好的 Bootstrap 3.0
- 下一篇: 不需要密码的windows计划任务设置