NodeJs基础之字节操作路径操作和文本操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NodeJs基础之字节操作路径操作和文本操作相关的知识,希望对你有一定的参考价值。
字节操作 buffer对象
- 构造函数
- new Buffer(size) 参数为数值,表示分配空间的长度
- new Buffer(string,[encoding]) 参数为字符串,表示存入Buffer的数据,编码可选
- new Buffer(array) 参数为数组,表示存入Buffer的数据
- 静态方法
- Buffer.isBuffer(obj) 判断是否为Buffer(静态方法直接通过类名调用)
- 实例方法
- buf.write(content,offset,length,encoding);
- content 表示写入Buffer的内容
- offset 表示写入Buffer的起始位置
- length 表示写入Buffer的字节数量
- encoding 表示写入Buffer的编码设置(ascii/utf8/utf16le/ucs2/base64/binary/hex)
- buf.write(content,offset,length,encoding);
路径操作 path对象
引入模块 var path = require("path");
- path.normalize(path) 规范化路径
- path.basename(path[, ext]) 获取文件名称,包括扩展名
- path.dirname(path) 获取文件全路径,不包括扩展名
- path.extname(path) 只获取文件扩展名
- path.parse(path) 把字符串形式的文件路径转化为对象形式
- path.format(pathObject) 把对象形式的文件路径转化为字符串形式
- path.relative(from, to) 找到两个路径的相对路径
- path.resolve([from ...], to) 把多个路径解析完成后形成最终路径
- path.join([path1][, path2][, ...]) 连接路径
- path.sep 路径分隔符 Window"\" 或 Linix"/"
‘foo\\bar\\baz‘.split(path.sep) // returns [‘foo‘, ‘bar‘, ‘baz‘]
- path.delimiter 环境变量分隔符,window中是“;” , Linix 系统中是“:”符号
文件操作 File System 对象
引入File System模块 var fs = require(‘fs‘)
1.判断文件是否存在
- fs.exists(path, callback);
- callback(exists); exists==true 存在 , exists==false 不存在 ,
2.查看文件的基本信息
- fs.stat(path, callback);
- callback(err, stats);
- stats是信息对象,有isFile(),isDirectory()方法,和size属性
3.打开文件
- fs.open(path, flags[, mode], callback); callback(err , fd);
- path:路径
- flags:读写标志位 只读"r"、读写"r+"
- mode:读/写/可执行 4/2/1 通常只在Linix中使用
- callback:回调函数(第二个参数是一个数字,表示文件的句柄);
4.读取文件
- 异步操作
- fs.read(fd, buffer, offset, length, position, callback);
- fd 文件句柄
- buffer 文件内容读取到什么地方
- offset 从Buffer的什么位置开始读取
- length 向Buffer中读取几个字节
- position 表示从文件中的什么位置开始读取
- callback 表示回调函数 callback(err, bytesRead, buffer)
- bytesRead 读入的字节长度,相当于length
- buffer 读入的内容
- 同步操作,返回值为字节长度
- var ret = fs.readSync(fd,bf,0,bf.length,0);
5.写入文件
- 异步操作
- fs.write(fd, buffer, offset, length[, position], callback)
- fd 文件句柄,操作哪个文件
- buffer //String> | //Buffer> 要写入的内容
- offset 从Buffer的什么位置开始写入
- length 写几个字节的内容
- position 表示从文件中的什么位置开始写入
- callback 表示回调函数(err, written, buffer)
- err表示错误信息
- written 即写入的内容的字节长度
- buffer 写入的内容
- 同步操作
- fs.writeSync(fd, buffer, offset, length[, position]); 返回值为写入的字节长度length
6.关闭文件
- 异步操作 fs.close(fd, callback); callback(err);
- 同步操作 fs.closeSync(fd); 没有返回值
7.读写文件的快捷操作
- 读取文件 fs.readFile(file[, options], callback); callback(err , data);
- 第一个参数要读的那个文件
- 如果第二个参数传递编码,那么读取到的数据就是文本;
- 如果不传递编码,那么读取到的数据是Buffer
- 读取的同步操作,返回值为读取到的内容
- fs.readFileSync(file[, options]);
- 写入文件 fs.writeFile(file, data[, options], callback); callback(err);
- 写入文件的同步操作,没有返回值
- fs.writeFileSync(file, data[, options])
8.文件夹操作
- 创建文件夹
- fs.mkdir(path[, mode], callback); callback(err);
- 参数path 要创建的文件夹,及其路径
- 创建文件夹的同步操作,没有返回值
- fs.mkdirSync(path[, mode])
- 读取文件夹
- fs.readdir(path[, options], callback);
- 参数path是文件夹路径
- options 编码 //String> 默认 ‘utf8‘
- callback(err , files); 第二个参数是文件的集合,数组类型,包含文件和文件夹
- 读取文件夹的同步操作,返回值是所含文件的集合,数组类型,包含文件和文件夹
- fs.readdirSync(path[, options]);
- 移除文件夹,只能移除空文件夹 fs.rmdir(path, callback); callback(err);
- 移除文件夹的同步操作,没有返回值 fs.rmdirSync(path)
9.监听文件与取消监听操作
- 监听文件的变化
- fs.watch(filename[, options][, listener]);
- filename是要监听的文件名
- listener //Function> 监听处理函数。参数(event,filename);
- event是文件发生变化的事件,一般为rename和change
- filename就是被监听的文件
- fs.watchFile(filename[, options], listener);
- options有两个属性
- persistent //Boolean> 是否被监听
- interval //Integer> 被监听的时间间隔,默认是5007毫秒
- listener //Function>,参数(curr,prev);
- curr表示文件变化之前的状态信息,prev表示文件变化之后的状态信息
- options有两个属性
- fs.watch(filename[, options][, listener]);
- 取消监听
- fs.unwatchFile(filename[, listener]);
- listener //Function>,这表示具体的函数名,可以没有,而不可以是匿名函数
- fs.unwatchFile(filename[, listener]);
10.文件流的读写操作
readStream.pipe(writeStream); 管道思想,简易写法
* 流文件的读取 fs.createReadStream(path[, options])
* path 读取的文件路径
* options <String> | <Object> 如果是字符串,是设置文件的编码格式
* 返回值 :返回的是读取的文件对象
* 流文件的写入 fs.createWriteStream(path[, options])
* path 要写入的文件路径
* options参数含义与读取的一致
* 返回值是写入的文件对象
注意:所有的文件写入操作,如果没有相应路径的文件,相当于创建新的文件
以上是关于NodeJs基础之字节操作路径操作和文本操作的主要内容,如果未能解决你的问题,请参考以下文章