zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Node.js文件操作一

JS文件Node 操作
2023-09-14 08:57:59 时间

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 = "";

 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 

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);


//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了,遇到了会用就行了。


node使用 nodemon 来监听文件变化 知识边界: nodemon 就像是vue里面的开启热加载功能一样,开发者只要放心开发,不用修改一点就需要重新启动项目,进行测试
Node 项目通过 .npmrc 文件指定依赖安装源 `npm` 命令运行时,往往通过命令行指定相关配置,最常用的便是使用 `--registry` 来指定依赖的安装源。`.npmrc`(NPM Running Configuration)可以指定 `npm` 命令运行时的配置内容。
社会主义 从.Net到iOS,在撸的道路上越走越远,工作之余经营着博客园http://www.cnblogs.com/5ishare,欢迎小伙伴(妹子更好)一起交流,谈谈人生理想。作为经常从网上索取免费资料的一员,要有回报回报的思想,也让更多的人少走弯路.