linux 建js文件系统,NodeJs基础(文件系统)

文件系统

在Node中,与文件系统的交互是非常重要的,服务器的本质就是将本地的文件发送到远程的客户端

Buffer(缓冲区)

Node中提供的新的对象,这个对象可以在node中直接使用,不需要引入;和js中的数组(js数组缺点:无法存储二进制数据)非常相似;Buffer中只能保存二进制数据

在Buffer中每一个元素都是二进制数据,但是直接打印时,会以十六进制显示;Buffer中每一个范围在00 ff之间(0 255),对应的二进制是00000000 11111111

buf.length 获取的是内容占用内存的大小,而不是长度;每个汉字在内存中占用3个字节

将一个字符串转换为一个Buffer

var buf = Buffer.from('Hello');

Buffer转换为字符串

var str = buf.toString();

创建一个Buffer对象

var buf = Buffer.alloc(size);

分配内存并初始化

size 是Buffer的大小,size的单位是kb,可直接计算;(alloc:分配)

向buf中添加元素

通过索引对buffer中的元素进行操作

只要数字输出如console.log(10)/alert(10)就是会以十进制输出

Number的toString(2/8/16)可以指定数字的进制

Buffer的大小一旦确认则不能修改;因为Buffer是直接对内存进行操作;为了性能更好所以大小都是不能改变

数字的值不要超过255,超过会溢出

遍历

for(var i=0; i < Buffer.length; i++){

console.log(buf[i])

}

Buffer.allocUnsafe(size)

创建一个指定大小的Buffer,不初始化。该Buffer中可能含有敏感数据

比Buffer.alloc(size) 性能高,但是不安全

fs 文件系统

Node通过fs模块和文件系统进行交互,使用文件系统必须先引入fs模块;fs模块属于node的核心模块,不需下载,直接引入即可

fs模块操作都有同步和异步调用

同步会阻塞系统;异步不会阻塞系统

异步肯定会有回调函数

fs模块中所有方法都有两份版本

不带sync,异步版本

带sync,同步版本

文件写入

打开文件 如果没有文件会自动新建文件

fs.open(path,flags[,mode],callback);

fs.openSync(path,flags[,mode]);

参数:

path 打开文件的路径

flags 对文件操作的类型,需要一个字符串作为参数 'r'/'w'

mode 设置文件的权限(主要针对Linux),一般不传

callback 回调函数,所有的异步方法必有回调函数

同步操作依靠返回值:当打开文件以后,会返回一个文件描述符作为返回值;文件描述符: 在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。

写入内容并保存

fs.write(fd,string[,position[,encoding]],callback);

fs.writeSync(fd,string[,position[,encoding]]);

参数:

fd:要写入的文件的描述符

string:要写入的内容

position:写入的起始的位置

encoding:写入文件的编码 默认utf-8

关闭文件

fs.close(fd,callback);

fs.closeSync(fd);

参数:

fd:要关闭的文件的文件描述符

异步文件写入

callback 回调函数,所有的异步方法必有回调函数

异步方法都是通过回调函数(的参数形式)返回结果

回调函数有两个参数:

err 错误信息,如果该对象存在,则证明出错了(错误优先原则)

fd 文件操作符,代表此时打开的文件

打开文件代码:

fs.open('fileName','w',function(err,fd){

//如果没有错误

if(!err){

//写入文件

fs.write(fd,'string',function(err){

if(!err){

//输出一句话

console.log('写入成功')

}

//关闭文件

fs.close(fd,function(err){

if(!err){

//输出一句话

console.log('关闭成功')

}

});

});

}

});

简单文件写入

fs.writeFile(filePath,data[,options],callback)

fs.writeFileSync(filePath,data[,options])

参数:

filePath:要写入的文件的路径

data:要写入的数据(String或Buffer)

options:配置选项,需要一个对象作为参数,一般不需要

encoding 文件的编码 默认--utf8

mode 文件的权限(一般不写) 默认--0666

flag 操作的类型 默认 'w'

callback 写入完成以后调用的函数

fs.writeFile('filePath','内容',function(err){

if(!err){

console.log('写入成功')

}else if(err){

console.log(err)

}

})

文件的操作符

w 对文件进行写操作 文件不存在则报错

r 对文件进行读操作 文件不存在则新建

a 对文件进行追加操作 文件不存在则新建

流式文件写入

传统的写入方式都是一次性将内容写入到文件中,如果文件过大,先将内容全部加载进内存后写入,这样在写入较大的数据时,容易导致内存溢出或者性能较差

所以我们需要引入流式文件写入来处理较大的文件

流主要使用两种

可写流

可读流

//创建可写流

var ws = fs.createWriteStream('filePath');

//监视流的状态,可以通过为流绑定open和close事件来监视流的状态(多次)

ws.on('open',function(){

console.log('流打开了')

});

ws.on('close',function(){

console.log('流关闭了')

})

//once()可以为一个对象绑定一个一次性的事件,该事件将会在触发一次后自动失效(一次)

ws.once('open',function(){

console.log('流打开了')

});

ws.once('close',function(){

console.log('流关闭了')

})

//通过可写流向文件写入内容

ws.write('datas')

//关闭流

ws.close(); 此方法会导致数据缺失

ws.end(); 可以将数据写入到文件,并关闭流

文件读取

1. 同步文件读取

2. 异步文件读取

3. 简单文件读取

fs.readFile(path[,options],callBack);

fs.readFileSync(path[,options]);

参数:

path:读取文件的路径

options:配置对象

encoding:指定打开文件的编码,默认是null

flag:文件的操作类型,默认是 r

callBack:回调函数,通过回调函数返回读取到的数据

err:错误对象

data:返回的数据(Buffer)

fs.readFile('fileName',function(err,date){

if(!err){

console.log(data);

//将读取到的数据写入到磁盘的其他位置

fs.writeFile('path',data,function(err){

if(!err){

console.log('写入成功')

}

})

}

})

4. 流式文件读取

流式文件读取,适合较大的文件

//创建一个可读流

var rs = fs.creatReadStream('fileName');

var ws = fs.creatWritStream('fileName');

rs.pipe(ws);

//监听rs的打开和关闭事件

rs.once('open',function(){

console.log('');

});

rs.once('close',function(){

console.log('');

});

//通过可读流读取一个文件,必须为流绑定data事件,当绑定data事件以后,流会自动读取

rs.on('data',function(data){

console.log(data);

});

其他操作

验证路径是否存在

fs.existsSync('path');

返回值:文件存在为true;文件不存在为false

同步和异步方法各有特点,具体情况区分使用

用来获取一个文件的状态

fs.stat(path,callBack);

fs.statSync(path);

参数:

path:要获取状态文件的路径

callBack:

err:错误对象

stats:状态对象,用来描述文件的状态

删除一个文件

fs.unlink('path',callBack);

fs.unlinkSync('path');

读取当前目录下的所有文件和文件夹的列表

fs.readdir('path'[,options],callBack);

fs.readdirSync('path'[,options]);

截断文件,使文件变成指定大小

fs.truncate('path',length,callBack);

fs.truncateSync('path',length);

创建文件夹

fs.mkdir('path'[, options],callBack);

fs.mkdirSync('path'[, options]);

删除文件夹

fs.rmdir('path',callBack);

fs.rmdirSync('path');

重写文件和目录名:可以实现剪切功能

fs.rename('oldPath','newPath',callBack);

fs.renameSync('oldPath','newPath');

监听文件 每隔一段时间去判断文件是否发生改变

fs.watchFile(filename[,option],listener);

listener:回调函数,传递两个参数,是stats类型的对象

current:表示当前文件的状态

previous:表示修改之前文件的状态

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值