Nodejs对文件数据和结构的操作(上)

一、Nodejs出现的意义

在Nodejs出现之前,用JavaScript我们无法对数据进行操作,js是基于浏览器进行开发的,要想开发服务器则要解决js中不能解决的两个问题,一是不能对文档流进行操作(文件的读取/写入),二是没有数据库的问题。

二、对文件数据的操作

nodejs开发服务器,要对文件数据的操作,即文件的读取和写入。
访问服务器的过程,就是文件读取和写入的过程。

对文件操作有很多种,同步操作、异步操作、简单操作……
在Nodejs中一般都为异步操作。

文件操作所有的操作方式都依赖于内置模块—fs模块,这个模块是专门操作文件的
基于模块来写模块的引入,fs模块用require方法来引入,赋值给const定义的常量fs
(const常量一经定义赋值不再轻易改变)。

//引入js核心模块--文件管理模块fs
const fs = require('fs');

注意⚠️:写入对象数据时,要调用对象的方法JSON.stringify() 将js数据转为JSON数据(字符串)再进行写入文件。(详例见 异步文件写入)

写入过程大致分为三步:
1.将文件打开。返回值是一个资源句柄,资源句柄指的是这句话占有内存的语句(文件对象);
2.将内容写入目标文件中;
3.关闭目标文件,目的是为了节约占用内存。

2.1 同步文件写入

涉及到三个方法:fs.openSync() fs.writeSync(). fs.closeSync()

fs.openSync(‘url+文件名’,打开方式,打开权限)

返回值:资源句柄(Resource handle),即写进的文件对象;
一参:‘url+文件名’,路径url一定不能错,如找不到该文件,则自动创建;
二参:打开方式,r 只读;w 写入,覆盖写;a 写入,追加写;
三参:打开权限,一般不传参。

let fh  = fs.openSync('./file/sync.txt','w');

fs.writeSync(资源句柄,写入内容,字符集,写入起始位置)

一参:资源句柄;
二参:写入内容,可以是字符串、JSON数据……
三参:编码字符集,常用 万国码‘utf-8’
四参:默认从左到右第一位开始,一般不传值。

let str = '我是传入的数据';
fs.writeSync(fh,str,'utf-8');

fs.closeSync(资源句柄)

一参:资源句柄,即关闭写入数据的文件对象。

fs.closeSync(fh);

2.2 异步文件写入

相比于同步文件写入,异步文件写入少了返回值,但多了回调函数。即每一个方法后都有一个回调函数,函数内置一或多个参数,用于判断方法是否执行成功,或此方法执行成功后,后续代码的执行。

fs.open(‘url+文件名’,打开方式,(error,资源句柄)=>{})

一参:‘url+文件名’,如不存在改文件,则自动创建;
二参:打开方式,‘r’ 只读;‘w’,写入,覆盖写;‘a’,写入,追加写;
三参:回调函数,内置两参–错误信息,资源句柄data

//以js数据为例
let obj = {name:'lisa',age:18,sex:'女',};

fs.write(资源句柄,写入内容,字符集,error=>{})

一参:资源句柄data
二参:写入内容

JSON.stringify(obj);//转为JSON数据 再写入

三参:字符集,用‘utf-8’
四参:回调函数 包含对错误信息的判断

error=>{
	if(error) console.log('写入失败');
	else console.log('写入成功');
}

fs.close(资源句柄,error=>{})

一参:资源句柄data
二参:回调函数。内置一参,错误信息。

//完整代码
let obj = {name:'lisa',age:18,sex:'女'};

fs.open('./file/async.json','w',(error,fd)=>{
    if(error){
        console.log('路径不存在或没权限');
    }else{
        // 打开文件成功后 的写入
        fs.write(fd,JSON.stringify(obj),'utf-8',error=>{
            if(error) console.log('写入失败');
            else console.log('写入成功');
        });
        // 关闭文件
        fs.close(fd,error=>{
            error?console.log('关闭失败'):console.log('关闭成功');
        })
    }
})

2.3简单文件写入(推荐使用 简单易记)

先引入js内置 文件管理模块

const fs = require('fs');

简单写入----异步写入

fs.writeFile(‘url’,写入内容,{字符集,写入方式},error=>{});

一参:‘url’,路径,包含路径和文件名,此例中为.json文件;
二参:写入内容。此例中为处理过后的JSON数据;
三参:描述,包含字符集,写入方式{encoding:‘utf-8’,flag:‘w’};
四参:回调函数,内置一参 错误信息

// 定义一个写入的内容 js数据,写入时转为JSON数据
let bookDate = [
    {id : 1,name : "聊斋志异",price : 600,author : "蒲松龄"},
    {id : 2,name : "西游记",price : 700,author : "吴承恩"},
    {id : 3,name : "红楼梦",price : 800,author : "曹雪芹"},
    {id : 4,name : "水浒传",price : 900,author : "施耐庵"},
    {id : 5,name : "三国演义",price : 1000,author : "罗贯中"},
    {id : 6,name : "资治通鉴",price : 1100,author : "司马光"}
];
	//异步写入方式
	fs.writeFile('./file/easy.json',JSON.stringify(bookDate),{encoding:'utf-8',flag:'w'},error=>{
	//三目运算符 以js数据bookDate为例
	error?console.log('写入失败'):console.log('写入成功');
});

	//同步写入方式,以字符串str为例
	let str = '我是被写入的内容';
	fs.writeFileSync('./file/writeFileSync.txt',str,{encoding:'utf-8',flag:'w'});
	

2.4 文件的读取

先引入fs内置核心模块 文件管理模块fs

const fs = require('fs');

fs.readFile(url,字符集,(error,资源句柄)=>{})

// 文件的异步读取
一参:url,读取的地址;
二参:读取的字符集,可选参数,常用‘utf-8’,如果不传取出的是一个buffer(二进制集合);
三参:回调函数,内置两参,错误信息和资源句柄date

//以读取.json文件为例
//要注意的是,读取JSON数据要调用对象方法JSON.parse() 转为真正的js数据
fs.readFile('./file/easy.json','utf-8',(error,data)=>{
	error?console.log('读取失败'):console.log(JSON.parse(date));
});

// 不传读取的字符集 得到的是一个buffer(即 二进制集合)
fs.readFile('./file/easy.json','utf-8',(error,data)=>{
	error?console.log('读取失败'):console.log(JSON.parse(date));
});

//文件的同步读取,与异步读取相比少了回调函数,多了返回值

//同步读取.JSON文件
let data = fs.readFileSync('./file/easy.json','utf-8');
console.log(data);//得到一组真正的js数据
let date = fs.readFileSync('./file/easy.json');
console.log(date);//得到一组buffer,即二进制集合


(暂更新于2021.07.24 11:59 如有错误 还请斧正…)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值