node.js中文网:http://nodejs.cn/api/

(path、Buffer、events、fs)

①path路径-----const {resolve} = require('path');

  • path.normalize(path);//规范化指定的 path,并处理 '..' 和 '.' 片段
path.normalize('C:\\temp\\\\foo\\bar\\..\\');
// 返回: 'C:\\temp\\foo\\'
  • path.join([...paths]);//使用平台特定的分隔符把所有 path 片段连接到一起,并规范化生成的路径

path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
// 返回: '/foo/bar/baz/asdf'
  • path.resolve([...paths]);//将路径或路径片段的序列处理成绝对路径

path.resolve('/foo/bar', './baz');
// 返回: '/foo/bar/baz'
  • path.basename(path[, ext]);//返回 path 的最后一部分,类似于 Unix 中的 basename 命令

path.basename('/foo/bar/baz/asdf/quux.html');
// 返回: 'quux.html'
  • path.extname(path);//返回 path 的扩展名,即从 path 的最后一部分中的最后一个 .(句号)字符到字符串结束

path.extname('index.html');
// 返回: '.html' path.extname('index.coffee.md');
// 返回: '.md'
  • path.dirname(path);//返回 path 的目录名,类似于 Unix 中的 dirname 命令

path.dirname('/foo/bar/baz/asdf/quux');
// 返回: '/foo/bar/baz/asdf'
  • path.sep;//返回平台特定的路径片段分隔符

'foo\\bar\\baz'.split(path.sep);
// 返回: ['foo', 'bar', 'baz']
  • path.delimiter;//返回平台特定的路径分隔符

console.log(process.env.PATH);
// 输出: 'C:\Windows\system32;C:\Windows;C:\Program Files\node\' process.env.PATH.split(path.delimiter);
// 返回: ['C:\\Windows\\system32', 'C:\\Windows', 'C:\\Program Files\\node\\']
  • path.win32;//返回为 Windows 实现的 path 方法

  • path.posix;//返回为 POSIX 实现的 path 方法

区别:

  • _dirname、_filename总返回文件的绝对路径
  • process.cwd( )返回执行node命令所在文件夹
  • ./或者../
    • 在require方法中总是相对当前文件所在文件夹
    • 在其他地方和process.cwd( )一样,相对node启动文件

②Buffer缓冲

  • 用于处理二进制数据流
  • 实例类似整数数组,大小固定
  • c++代码在V8堆外分配物理内存

1)初始化

  • Buffer.alloc(size[, fill[, encoding]]);//创建一个大小为 size 字节的 Buffer

const buf = Buffer.alloc(5, 'a');
console.log(buf);
// 输出: <Buffer 61 61 61 61 61>
  • Buffer.allocUnsafe(size);//创建一个大小为 size 字节的 Buffer,Buffer的内容是未知的

const buf = Buffer.allocUnsafe(10);
console.log(buf);
// 输出: <Buffer a0 8b 28 3f 01 00 00 00 50 32>
// (输出的内容是内存的旧数据,每次都不同)
  • Buffer.from(array);//使用字节数组 array 创建 Buffer

// 创建一个包含字符串 'buffer' 的 UTF-8 字节的 Buffer。
const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);
  • Buffer.from(string[, encoding]);//创建一个包含 string 的 Buffer

const buf1 = Buffer.from('this is a tést');
const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex');
console.log(buf1.toString());
// 输出: this is a tést
console.log(buf2.toString());
// 输出: this is a tést
console.log(buf1.toString('ascii'));
// 输出: this is a tC)st

2)类

  • Buffer.byteLength(string[, encoding]);//返回字符串的实际字节长度

const str = '\u00bd + \u00bc = \u00be';
console.log(`${str}: ${str.length} 个字符,` +`${Buffer.byteLength(str, 'utf8')} 个字节`);
// 输出: ½ + ¼ = ¾: 9 个字符, 12 个字节
  • Buffer.concat(list[, totalLength]);//返回一个合并了 list 中所有 Buffer 的新 Buffer

// 用含有三个 `Buffer` 的数组创建一个单一的 `Buffer`。
const buf1 = Buffer.alloc(10);
const buf2 = Buffer.alloc(14);
const totalLength = buf1.length + buf2.length;
console.log(totalLength);
// 输出: 24
const bufA = Buffer.concat([buf1, buf2], totalLength);
console.log(bufA);
// 输出: <Buffer 00 00 00 00 ...>
console.log(bufA.length);
// 输出: 24
  • Buffer.isBuffer(obj);//如果 obj 是一个 Buffer,则返回 true,否则返回 false

3)实例-----const buf = Buffer.from('This is a test!');

  • buf.length;//回内存中分配给 buf 的字节数

const buf = Buffer.alloc(1234);
console.log(buf.length);
// 输出: 1234
  • buf.toString([encoding[, start[, end]]]);//根据 encoding 指定的字符编码将 buf 解码成字符串

const buf = Buffer.from('tést');
console.log(buf.toString('hex'));
// 输出: 74c3a97374
console.log(buf.toString('utf8', 0, 3));
// 输出: té
  • buf.fill(value[, offset[, end]][, encoding]);//用指定的 value 填充 buf

// 用 ASCII 字符 'h' 填充 `Buffer`。
const b = Buffer.allocUnsafe(50).fill('h');
console.log(b.toString());
// 输出: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
  • buf.equals(otherBuffer);//如果 buf 与 otherBuffer 具有完全相同的字节,则返回 true,否则返回 false

const buf1 = Buffer.from('ABC');
const buf2 = Buffer.from('414243', 'hex');
const buf3 = Buffer.from('ABCD');
console.log(buf1.equals(buf2));
// 输出: true
console.log(buf1.equals(buf3));
// 输出: false
  • buf.indexOf(value[, byteOffset][, encoding]);//返回buf 中首次出现 value 的索引,如果 buf 没包含 value 则返回 -1

const buf = Buffer.from('this is a buffer');
console.log(buf.indexOf('this'));
// 输出: 0
console.log(buf.indexOf('is'));
// 输出: 2
  • buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]]);//拷贝 buf 中某个区域的数据到 target 中的某个区域,即使 target 的内存区域与 buf 的重叠

// 创建两个 `Buffer`。
const buf1 = Buffer.allocUnsafe(26);
const buf2 = Buffer.allocUnsafe(26).fill('!');
for (let i = 0; i < 26; i++) {
// 97 是 'a' 的十进制 ASCII 值。
buf1[i] = i + 97;
}
// 拷贝 `buf1` 中第 16 至 19 字节偏移量的数据到 `buf2` 第 8 字节偏移量开始。
buf1.copy(buf2, 8, 16, 20);
console.log(buf2.toString('ascii', 0, 25));
// 输出: !!!!!!!!qrst!!!!!!!!!!!!!

4)字符串解码器-----string_decoder 模块提供了一个 API,用于把 Buffer 对象解码成字符串

const { StringDecoder } = require('string_decoder');
const decoder = new StringDecoder('utf8'); const cent = Buffer.from([0xC2, 0xA2]);
console.log(decoder.write(cent));

③events事件-----const EventEmitter = require('events');//所有能触发时间的对象都是EventEmitter类的实例

  • emitter.on(eventName, listener);//添加 listener 函数到名为 eventName 的事件的监听器数组的末尾,注册监听器

const myEE = new EventEmitter();
myEE.on('foo', () => console.log('a'));
myEE.prependListener('foo', () => console.log('b'));
myEE.emit('foo');
// b
// a
  • emitter.emit(eventName[, ...args]);//按照监听器注册的顺序,同步地调用每个注册到名为 eventName 的事件的监听器,并传入提供的参数,触发事件

  • emitter.once(eventName, listener);//添加单次监听器 listener 到名为 eventName 的事件

  • emitter.removeListener(eventName, listener);//从名为 eventName 的事件的监听器数组中移除指定的 listener

  • emitter.removeAllListeners([eventName]);//移除全部监听器或指定的 eventName 事件的监听器

④fs文件系统-----const fs = require('fs');

1)读

  • fs.readFile(path[, options], callback);//异步地读取文件的内容

fs.readFile('/etc/passwd', 'utf8', callback);
fs.readFile('/etc/passwd', (err, data) => {
if (err) throw err;
console.log(data);
});
  • fs.readFileSync(path[, options]);//同步返回文件的内容,同步比异步快,但是会阻塞

2)写

  • fs.writeFile(file, data[, options], callback);//异步地将数据写入文件,如果文件已存在,则覆盖文件
fs.writeFile('文件.txt', '内容', 'utf8', callback);

const data = new Uint8Array(Buffer.from('Node.js中文网'));
fs.writeFile('文件.txt', data, (err) => {
if (err) throw err;
console.log('文件已保存');
});

3)状态

  • fs.stat(path[, options], callback);//异步查看文件的属性

fs.stat('文件路径', (err, stats) => {
if (err) throw err;
console.log(stats.isFile( ));//文件
console.log(stats.isDirectory( ));//文件夹
console.log(stats);//状态
});

4)重命名

  • fs.rename(oldPath, newPath, callback);//异步地把文件 oldPath 重命名为 newPath

fs.rename('旧文件.txt', '新文件.txt', (err) => {
if (err) throw err;
console.log('已完成重命名');
});

5)删除

  • fs.unlink(path, callback);//异步地移除一个文件或符号链接

// 假设 'path/file.txt' 是一个普通文件。
fs.unlink('path/file.txt', (err) => {
if (err) throw err;
console.log('文件已删除');
});
  • fs.readdir(path[, options], callback);//异步读取目录(文件夹)的内容

  • fs.mkdir(path[, options], callback);//异步地创建目录

// 创建 /tmp/a/apple 目录,不管 `/tmp` 和 /tmp/a 目录是否存在。
fs.mkdir('/tmp/a/apple', { recursive: true }, (err) => {
if (err) throw err;
});
  • fs.rmdir(path, callback);//异步地删除目录

  • fs.watch(filename[, options][, listener]);//监视 filename 的变化,filename 可以是一个文件或一个目录

6)流(有向传输数据)

  • const rs = fs.creatReadStream('路径');

    • rs.pipe(process.stout);
  • const ws = fs.creatWriteStream('路径');
    • ws.write('字符串');
    • ws.end( );

7)解决回调地狱(异步回调里有回调,回调里又有回调......)

const util = require('util');
const fs = require('fs'); const stat = util.promisify(fs.stat);
stat('.').then((stats) => {
// Do something with `stats`
}).catch((error) => {
// Handle the error.
});
const util = require('util');
const fs = require('fs'); const stat = util.promisify(fs.stat); async function callStat() {
const stats = await stat('.');
console.log(`This directory is owned by ${stats.uid}`);
}

NodeJS:(二)基础常用API的更多相关文章

  1. 4、TensorFlow基础(二)常用API与变量作用域

    1.图.操作和张量 TensorFlow 的计算表现为数据流图,所以 tf.Graph 类中包含一系列表示计算的操作对象(tf.Operation),以及在操作之间流动的数据 — 张量对象(tf.Te ...

  2. appium 基础二:常用api接口

    一.获取手机分辨率 size=driver.get_window_size()#获取手机屏幕大小,分辨率 print(size)#{'width': 720, 'height': 1280} 得到的是 ...

  3. Java 基础 常用API ( 正则表达式,Date类,DateFormat类,Calendar类 )

    正则表达式 正则表达式的概念 正则表达式(英语:Regular Expression,在代码中常简写为regex). 正则表达式是一个字符串,使用单个字符串来描述.用来定义匹配规则,匹配一系列符合某个 ...

  4. Java 基础 常用API (Object类,String类,StringBuffer类)

    Java API Java 的API(API: Application(应用) Programming(程序) Interface(接口)) Java API就是JDK中提供给我们使用的类,这些类将底 ...

  5. Java 基础 常用API (System类,Math类,Arrays, BigInteger,)

    基本类型包装类 基本类型包装类概述 在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们需要把字符串数据,根据需求转换成指定的基本数据类型,如年龄需要转换成int类 ...

  6. Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API

    不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...

  7. java基础3.0:Java常用API

    本篇介绍Java基础中常用API使用,当然只是简单介绍,围绕重要知识点引入,巩固开发知识,深入了解每个API的使用,查看JavaAPI文档是必不可少的. 一.java.lang包下的API Java常 ...

  8. 【OpenGL游戏开发之二】OpenGL常用API

    OpenGL常用API 开发基于OpenGL的应用程序,必须先了解OpenGL的库函数.它采用C语言风格,提供大量的函数来进行图形的处理和显示.OpenGL库函数的命名方式非常有规律.所有OpenGL ...

  9. JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API

    森林森 一份耕耘,一份收获 博客园 首页 新随笔 联系 管理 订阅 随笔- 397  文章- 0  评论- 78  JAVA基础学习day16--集合三-Map.HashMap,TreeMap与常用A ...

随机推荐

  1. 谁考了第k名

    题目描述: 在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩. 输入: 第一行有两个整数,分别是学生的人数n(1≤n≤100),和求第k名学生的k(1≤k ...

  2. ADG日志传输方式参数log_archive_dest_n详解

    主库的日志发送是由log_archive_dest_n参数设置(注意:同时还有一个和它相对应的开关参数log_archive_dest_state_n,用于指定该参数是否有效),下面简单介绍下该参数各 ...

  3. python 发送带附件的邮件

    特别注意的地方:filespart.add_header("Content-Disposition","attachment",filename=file_na ...

  4. python框架之Django(15)-contenttype模块

    假如有一个书城系统,需要给作者和书籍加上评论功能.如果给每个表单独建一个评论表,那么我们以后要扩展其它模块评论功能的时候,还需要随之新建一张评论表,会显得很冗余.对于这种情况,Django 给我们提供 ...

  5. vs安装问题

    1 首先windows update异常,导致vs2015的一个安装不上,先试着修一下: https://support.microsoft.com/zh-cn/help/2629484 如果提示:“ ...

  6. vue中router使用keep-alive缓存页面的注意事项

    <keep-alive exclude="QRCode"> <router-view></router-view> </keep-aliv ...

  7. node os模块

    const os = require('os'); console.log(os.homedir()); console.log(os.hostname()); console.log(os.plat ...

  8. int bool 字符串 列表 字典 集合

    1.int和bool 输出i的最大二进制位数inti = 1000 print(i.bit_length()) 2. str int bool list set dict  tuple 相互转换 pr ...

  9. Domain Driven Development相关概念

    Entity 与 Value Object1,Entity有唯一的身份标识,是可变的对象.Value Object是immutable,创建了就不能改变.2,Value Object可以在多个领域之间 ...

  10. numpy 性能提升

    a = np.array([1,2,3,4,5,1,2,2,2])c = np.unique(a)print(c) 对于很大的稀疏矩阵,我们不能用a[a>0]去取大于0的元素,而应该使用np.w ...