Node.js和其他語言一樣,也有文件操作。先不說node.js中的文件操作,其他語言的文件操作一般也都是有打開、關閉、讀、寫、文件信息、新建刪除目錄、刪除文件、檢測文件路徑等。在node.js中也是一樣,也都是這些功能,可能就是api與其他語言不太一樣。
一、同步、異步打開關閉
/** * Created by Administrator on 2016/3/21. */var fs=require("fs");//同步讀 fs.openSync = function(path, flags, mode)//模塊fs.js文件中如上面定義的openSync 函數3個參數//.1.path 文件路徑//2.flags 打開文件的模式//3.model 設置文件訪問模式//fd文件描述var fd=fs.openSync("data/openClose.txt",'w');//fs.closeSync = function(fd)fs.closeSync(fd);//異步讀寫//fs.open = function(path, flags, mode, callback_)//fs.close = function(fd, callback)fs.open("data/openColse1.txt",'w',function(err,fd) { if (!err) { fs.close(fd,function(){ console.log("closed"); }); }});
其中的flags其他語言也會有.其實主要分3部分 r、w、a.和C中的差不多。
1.r ―― 以只讀方式打開文件,數據流的初始位置在文件開始
2.r+ ―― 以可讀寫方式打開文件,數據流的初始位置在文件開始
3.w ――如果文件存在,則將文件長度清0,即該文件內容會丟失。如果不存在,則嘗試創建它。數據流的初始位置在文件開始
4.w+ ―― 以可讀寫方式打開文件,如果文件不存在,則嘗試創建它,如果文件存在,則將文件長度清0,即該文件內容會丟失。數據流的初始位置在文件開始
5.a ―― 以只寫方式打開文件,如果文件不存在,則嘗試創建它,數據流的初始位置在文件末尾,隨后的每次寫操作都會將數據追加到文件后面。
6.a+ ――以可讀寫方式打開文件,如果文件不存在,則嘗試創建它,數據流的初始位置在文件末尾,隨后的每次寫操作都會將數據追加到文件后面。
二、讀寫
1.簡單文件讀寫
/** * Created by Administrator on 2016/3/21. */var fs = require('fs');var config = { maxFiles: 20, maxConnections: 15, rootPath: "/webroot"};var configTxt = JSON.stringify(config);var options = {encoding:'utf8', flag:'w'};//options 定義字符串編碼 打開文件使用的模式 標志的encoding、mode、flag屬性 可選//異步//fs.writeFile = function(path, data, options, callback_)//同步//fs.writeFileSync = function(path, data, options)fs.writeFile('data/config.txt', configTxt, options, function(err){ if (err){ console.log("Config Write Failed."); } else { console.log("Config Saved."); readFile(); }});function readFile(){ var fs = require('fs'); var options = {encoding:'utf8', flag:'r'}; //異步 //fs.readFile = function(path, options, callback_) //同步 //fs.readFileSync = function(path, options) fs.readFile('data/config.txt', options, function(err, data){ if (err){ console.log("Failed to open Config File."); } else { console.log("Config Loaded."); var config = JSON.parse(data); console.log("Max Files: " + config.maxFiles); console.log("Max Connections: " + config.maxConnections); console.log("Root Path: " + config.rootPath); } });}
"C:/Program Files (x86)/JetBrains/WebStorm 11.0.3/bin/runnerw.exe" F:/nodejs/node.exe SimpleReadWrite.jsConfig Saved.Config Loaded.Max Files: 20Max Connections: 15Root Path: /webrootProcess finished with exit code 0
2.同步讀寫
/** * Created by Administrator on 2016/3/21. */var fs = require('fs');var veggieTray = ['carrots', 'celery', 'olives'];fd = fs.openSync('data/veggie.txt', 'w');while (veggieTray.length){ veggie = veggieTray.pop() + " "; //系統api //fd 文件描述 第二個參數是被寫入的String或Buffer // offset是第二個參數開始讀的索引 null是表示當前索引 //length 寫入的字節數 null一直寫到數據緩沖區末尾 //position 指定在文件中開始寫入的位置 null 文件當前位置 // fs.writeSync(fd, buffer, offset, length[, position]); // fs.writeSync(fd, string[, position[, encoding]]); //fs.writeSync = function(fd, buffer, offset, length, position) var bytes = fs.writeSync(fd, veggie, null, null); console.log("Wrote %s %dbytes", veggie, bytes);}fs.closeSync(fd);var fs = require('fs');fd = fs.openSync('data/veggie.txt', 'r');var veggies = "";do { var buf = new Buffer(5); buf.fill(); //fs.readSync = function(fd, buffer, offset, length, position) var bytes = fs.readSync(fd, buf, null, 5); console.log("read %dbytes", bytes); veggies += buf.toString();} while (bytes > 0);fs.closeSync(fd);console.log("Veggies: " + veggies);
"C:/Program Files (x86)/JetBrains/WebStorm 11.0.3/bin/runnerw.exe" F:/nodejs/node.exe syncReadWrite.jsWrote olives 7bytesWrote celery 7bytesWrote carrots 8bytesread 5bytesread 5bytesread 5bytesread 5bytesread 2bytesread 0bytesVeggies: olives celery carrots Process finished with exit code 0
3.異步讀寫 和同步讀寫的參數差不多就是多了callback
/** * Created by Administrator on 2016/3/21. */var fs = require('fs');var fruitBowl = ['apple', 'orange', 'banana', 'grapes'];function writeFruit(fd){ if (fruitBowl.length){ var fruit = fruitBowl.pop() + " "; // fs.write(fd, buffer, offset, length[, position], callback); // fs.write(fd, string[, position[, encoding]], callback); // fs.write = function(fd, buffer, offset, length, position, callback) fs.write(fd, fruit, null, null, function(err, bytes){ if (err){ console.log("File Write Failed."); } else { console.log("Wrote: %s %dbytes", fruit, bytes); writeFruit(fd); } }); } else { fs.close(fd); ayncRead(); }}fs.open('data/fruit.txt', 'w', function(err, fd){ writeFruit(fd);});function ayncRead(){ var fs = require('fs'); function readFruit(fd, fruits){ var buf = new Buffer(5); buf.fill(); //fs.read = function(fd, buffer, offset, length, position, callback) fs.read(fd, buf, 0, 5, null, function(err, bytes, data){ if ( bytes > 0) { console.log("read %dbytes", bytes); fruits += data; readFruit(fd, fruits); } else { fs.close(fd); console.log ("Fruits: %s", fruits); } }); } fs.open('data/fruit.txt', 'r', function(err, fd){ readFruit(fd, ""); });}
"C:/Program Files (x86)/JetBrains/WebStorm 11.0.3/bin/runnerw.exe" F:/nodejs/node.exe asyncReadWrite.jsWrote: grapes 7bytesWrote: banana 7bytesWrote: orange 7bytesWrote: apple 6bytesread 5bytesread 5bytesread 5bytesread 5bytesread 5bytesread 2bytesFruits: grapes banana orange apple Process finished with exit code 0
4.流式讀寫
/** * Created by Administrator on 2016/3/21. */var fs = require('fs');var grains = ['wheat', 'rice', 'oats'];var options = { encoding: 'utf8', flag: 'w' };//從下面的系統api可以看到 createWriteStream 就是創建了一個writable流//fs.createWriteStream = function(path, options) {// return new WriteStream(path, options);//};////util.inherits(WriteStream, Writable);//fs.WriteStream = WriteStream;//function WriteStream(path, options)var fileWriteStream = fs.createWriteStream("data/grains.txt", options);fileWriteStream.on("close", function(){ console.log("File Closed."); //流式讀 streamRead();});while (grains.length){ var data = grains.pop() + " "; fileWriteStream.write(data); console.log("Wrote: %s", data);}fileWriteStream.end();//流式讀function streamRead(){ var fs = require('fs'); var options = { encoding: 'utf8', flag: 'r' }; //fs.createReadStream = function(path, options) { // return new ReadStream(path, options); //}; // //util.inherits(ReadStream, Readable); //fs.ReadStream = ReadStream; // //function ReadStream(path, options) //createReadStream 就是創建了一個readable流 var fileReadStream = fs.createReadStream("data/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."); });}
"C:/Program Files (x86)/JetBrains/WebStorm 11.0.3/bin/runnerw.exe" F:/nodejs/node.exe StreamReadWrite.jsWrote: oats Wrote: rice Wrote: wheat File Closed.Grains: oats rice wheat Read 16 bytes of data.File Closed.Process finished with exit code 0
個人覺得像這些api用一用感受一下就ok了,遇到了會用就行了。
新聞熱點
疑難解答