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.js Config Saved. Config Loaded. Max Files: 20 Max Connections: 15 Root Path: /webroot Process 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.js Wrote olives 7bytes Wrote celery 7bytes Wrote carrots 8bytes read 5bytes read 5bytes read 5bytes read 5bytes read 2bytes read 0bytes Veggies: 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.js Wrote: grapes 7bytes Wrote: banana 7bytes Wrote: orange 7bytes Wrote: apple 6bytes read 5bytes read 5bytes read 5bytes read 5bytes read 5bytes read 2bytes Fruits: 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.js Wrote: 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了,遇到了会用就行了。
本文地址:https://www.stayed.cn/item/10740
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我