当前位置: 首页 > article >正文

第16节 Node.js 文件系统

Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API。 Node 导入文件系统模块(fs)语法如下所示:

var fs = require("fs")

异步和同步

Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。

异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。

建议大家使用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞。

实例

创建 input.txt 文件,内容如下:

编程狮官网地址:www.w3cschool.cn
文件读取实例

创建 file.js 文件, 代码如下:

var fs = require("fs");// 异步读取
fs.readFile('input.txt', function (err, data) {if (err) {return console.error(err);}console.log("异步读取: " + data.toString());
});// 同步读取
var data = fs.readFileSync('input.txt');
console.log("同步读取: " + data.toString());console.log("程序执行完毕。");

以上代码执行结果如下:

$ node file.js 
同步读取: 编程狮官网地址:www.w3cschool.cn
文件读取实例
程序执行完毕。
异步读取: 编程狮官网地址:www.w3cschool.cn
文件读取实例

接下来,让我们来具体了解下 Node.js 文件系统的方法。

打开文件

语法

以下为在异步模式下打开文件的语法格式:

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

参数

参数使用说明如下:

  • path - 文件的路径。
  • flags - 文件打开的行为。具体值详见下文。
  • mode - 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。
  • callback - 回调函数,带有两个参数如:callback(err, fd)。

flags 参数可以是以下值:

Flag描述
r以读取模式打开文件。如果文件不存在抛出异常。
r+以读写模式打开文件。如果文件不存在抛出异常。
rs以同步的方式读取文件。
rs+以同步的方式读取和写入文件。
w以写入模式打开文件,如果文件不存在则创建。
wx类似 'w',但是如果文件路径存在,则文件写入失败。
w+以读写模式打开文件,如果文件不存在则创建。
wx+类似 'w+', 但是如果文件路径存在,则文件读写失败。
a以追加模式打开文件,如果文件不存在则创建。
ax类似 'a', 但是如果文件路径存在,则文件追加失败。
a+以读取追加模式打开文件,如果文件不存在则创建。
ax+类似 'a+', 但是如果文件路径存在,则文件读取追加失败。

实例

接下来我们创建 file.js 文件,并打开 input.txt 文件进行读写,代码如下所示:

var fs = require("fs");// 异步打开文件
console.log("准备打开文件!");
fs.open('input.txt', 'r+', function(err, fd) {if (err) {return console.error(err);}console.log("文件打开成功!");     
});

以上代码执行结果如下:

$ node file.js 
准备打开文件!
文件打开成功!

获取文件信息

语法

以下为通过异步模式获取文件信息的语法格式:

fs.stat(path, callback)

参数

参数使用说明如下:

  • path - 文件路径。
  • callback - 回调函数,带有两个参数如:(err, stats), stats 是 fs.Stats 对象。

fs.stat(path)执行后,会将stats类的实例返回给其回调函数。可以通过stats类中的提供方法判断文件的相关属性。例如判断是否为文件:

var fs = require('fs');fs.stat('/Users/liuht/code/itbilu/demo/fs.js', function (err, stats) {console.log(stats.isFile());         //true
})

stats类中的方法有:

方法描述
stats.isFile()如果是文件返回 true,否则返回 false。
stats.isDirectory()如果是目录返回 true,否则返回 false。
stats.isBlockDevice()如果是块设备返回 true,否则返回 false。
stats.isCharacterDevice()如果是字符设备返回 true,否则返回 false。
stats.isSymbolicLink()如果是软链接返回 true,否则返回 false。
stats.isFIFO()如果是FIFO,返回true,否则返回 false。FIFO是UNIX中的一种特殊类型的命令管道。
stats.isSocket()如果是 Socket 返回 true,否则返回 false。

实例

接下来我们创建 file.js 文件,代码如下所示:

var fs = require("fs");console.log("准备打开文件!");
fs.stat('input.txt', function (err, stats) {if (err) {return console.error(err);}console.log(stats);console.log("读取文件信息成功!");// 检测文件类型console.log("是否为文件(isFile) ? " + stats.isFile());console.log("是否为目录(isDirectory) ? " + stats.isDirectory());    
});

以上代码执行结果如下:

$ node file.js 
准备打开文件!
{ dev: 16777220,mode: 33188,nlink: 1,uid: 501,gid: 20,rdev: 0,blksize: 4096,ino: 40333161,size: 61,blocks: 8,atime: Mon Sep 07 2015 17:43:55 GMT+0800 (CST),mtime: Mon Sep 07 2015 17:22:35 GMT+0800 (CST),ctime: Mon Sep 07 2015 17:22:35 GMT+0800 (CST) }
读取文件信息成功!
是否为文件(isFile) ? true
是否为目录(isDirectory) ? false

写入文件

语法

以下为异步模式下写入文件的语法格式:

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

writeFile 直接打开文件默认是 w 模式,所以如果文件存在,该方法写入的内容会覆盖旧的文件内容。

参数

参数使用说明如下:

  • file - 文件名或文件描述符。
  • data - 要写入文件的数据,可以是 String(字符串) 或 Buffer(缓冲) 对象。
  • options - 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 , flag 为 'w'
  • callback - 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。

实例

接下来我们创建 file.js 文件,代码如下所示:

var fs = require("fs");console.log("准备写入文件");
fs.writeFile('input.txt', '我是通 过fs.writeFile 写入文件的内容',  function(err) {if (err) {return console.error(err);}console.log("数据写入成功!");console.log("--------我是分割线-------------")console.log("读取写入的数据!");fs.readFile('input.txt', function (err, data) {if (err) {return console.error(err);}console.log("异步读取文件数据: " + data.toString());});
});

以上代码执行结果如下:

$ node file.js 
准备写入文件
数据写入成功!
--------我是分割线-------------
读取写入的数据!
异步读取文件数据: 我是通 过fs.writeFile 写入文件的内容

读取文件

语法

以下为异步模式下读取文件的语法格式:

fs.read(fd, buffer, offset, length, position, callback)

该方法使用了文件描述符来读取文件。

参数

参数使用说明如下:

  • fd - 通过 fs.open() 方法返回的文件描述符。
  • buffer - 数据写入的缓冲区。
  • offset - 缓冲区写入的写入偏移量。
  • length - 要从文件中读取的字节数。
  • position - 文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取。
  • callback - 回调函数,有三个参数err, bytesRead, buffer,err 为错误信息, bytesRead 表示读取的字节数,buffer 为缓冲区对象。

实例

input.txt 文件内容为:

编程狮官网地址:www.w3cschool.cn

接下来我们创建 file.js 文件,代码如下所示:

var fs = require("fs");
var buf = new Buffer.alloc(1024);console.log("准备打开已存在的文件!");
fs.open('input.txt', 'r+', function(err, fd) {if (err) {return console.error(err);}console.log("文件打开成功!");console.log("准备读取文件:");fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){if (err){console.log(err);}console.log(bytes + "  字节被读取");// 仅输出读取的字节if(bytes > 0){console.log(buf.slice(0, bytes).toString());}});
});

以上代码执行结果如下:

$ node file.js 
准备打开已存在的文件!
文件打开成功!
准备读取文件:
42  字节被读取
编程狮官网地址:www.w3cschool.cn

关闭文件

语法

以下为异步模式下关闭文件的语法格式:

fs.close(fd, callback)

该方法使用了文件描述符来读取文件。

参数

参数使用说明如下:

  • fd - 通过 fs.open() 方法返回的文件描述符。
  • callback - 回调函数,没有参数。

实例

input.txt 文件内容为:

编程狮官网地址:www.w3cschool.cn

接下来我们创建 file.js 文件,代码如下所示:

var fs = require("fs");
var buf = new Buffer.alloc(1024);console.log("准备打开文件!");
fs.open('input.txt', 'r+', function(err, fd) {if (err) {return console.error(err);}console.log("文件打开成功!");console.log("准备读取文件!");fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){if (err){console.log(err);}// 仅输出读取的字节if(bytes > 0){console.log(buf.slice(0, bytes).toString());}// 关闭文件fs.close(fd, function(err){if (err){console.log(err);} console.log("文件关闭成功");});});
});

以上代码执行结果如下:

$ node file.js 
准备打开文件!
文件打开成功!
准备读取文件!

编程狮官网地址:www.w3cschool.cn

文件关闭成功

截取文件

语法

以下为异步模式下截取文件的语法格式:

fs.ftruncate(fd, len, callback)

该方法使用了文件描述符来读取文件。

参数

参数使用说明如下:

  • fd - 通过 fs.open() 方法返回的文件描述符。
  • len - 文件内容截取的长度。
  • callback - 回调函数,没有参数。

实例

input.txt 文件内容为:

site:www.w3cschool.com

接下来我们创建 file.js 文件,代码如下所示:

var fs = require("fs");
var buf = new Buffer.alloc(1024);console.log("准备打开文件!");
fs.open('input.txt', 'r+', function(err, fd) {if (err) {return console.error(err);}console.log("文件打开成功!");console.log("截取10字节内的文件内容,超出部分将被去除。");// 截取文件fs.ftruncate(fd, 10, function(err){if (err){console.log(err);} console.log("文件截取成功。");console.log("读取相同的文件"); fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){if (err){console.log(err);}// 仅输出读取的字节if(bytes > 0){console.log(buf.slice(0, bytes).toString());}// 关闭文件fs.close(fd, function(err){if (err){console.log(err);} console.log("文件关闭成功!");});});});
});

以上代码执行结果如下:

$ node file.js 
准备打开文件!
文件打开成功!
截取10字节内的文件内容,超出部分将被去除。
文件截取成功。
读取相同的文件
site:www.r
文件关闭成功

删除文件

语法

以下为删除文件的语法格式:

fs.unlink(path, callback)

参数

参数使用说明如下:

  • path - 文件路径。
  • callback - 回调函数,没有参数。

实例

input.txt 文件内容为:

site:www.w3cschool.com

接下来我们创建 file.js 文件,代码如下所示:

var fs = require("fs");console.log("准备删除文件!");
fs.unlink('input.txt', function(err) {if (err) {return console.error(err);}console.log("文件删除成功!");
});

以上代码执行结果如下:

$ node file.js 
准备删除文件!
文件删除成功!

再去查看 input.txt 文件,发现已经不存在了。

创建目录

语法

以下为创建目录的语法格式:

fs.mkdir(path[, options], callback)

参数

参数使用说明如下:

  • path - 文件路径。
  • options 参数可以是:recursive - 是否以递归的方式创建目录,默认为 false。mode - 设置目录权限,默认为 0777。
  • callback - 回调函数,没有参数。

实例

接下来我们创建 file.js 文件,代码如下所示:

var fs = require("fs");
// tmp 目录必须存在
console.log("创建目录 /tmp/test/");
fs.mkdir("/tmp/test/",function(err){if (err) {return console.error(err);}console.log("目录创建成功。");
});

以上代码执行结果如下:

$ node file.js 
创建目录 /tmp/test/
目录创建成功。

可以添加 recursive: true 参数,不管创建的目录 /tmp 和 /tmp/a 是否存在:

fs.mkdir('/tmp/a/apple', { recursive: true }, (err) => {if (err) throw err;
});

读取目录

语法

以下为读取目录的语法格式:

fs.readdir(path, callback)

参数

参数使用说明如下:

  • path - 文件路径。
  • callback - 回调函数,回调函数带有两个参数err, files,err 为错误信息,files 为 目录下的文件数组列表。

实例

接下来我们创建 file.js 文件,代码如下所示:

var fs = require("fs");console.log("查看 /tmp 目录");
fs.readdir("/tmp/",function(err, files){if (err) {return console.error(err);}files.forEach( function (file){console.log( file );});
});

以上代码执行结果如下:

$ node file.js 
查看 /tmp 目录
input.out
output.out
test
test.txt

删除目录

语法

以下为删除目录的语法格式:

fs.rmdir(path, callback)

参数

参数使用说明如下:

  • path - 文件路径。
  • callback - 回调函数,没有参数。

实例

接下来我们创建 file.js 文件,代码如下所示:

var fs = require("fs");
// 执行前创建一个空的 /tmp/test 目录
console.log("准备删除目录 /tmp/test");
fs.rmdir("/tmp/test",function(err){if (err) {return console.error(err);}console.log("读取 /tmp 目录");fs.readdir("/tmp/",function(err, files){if (err) {return console.error(err);}files.forEach( function (file){console.log( file );});});
});

以上代码执行结果如下:

$ node file.js 
准备删除目录 /tmp/test
读取 /tmp 目录
……

文件模块方法参考手册

以下为 Node.js 文件模块相同的方法列表:

序号方法 & 描述
1fs.rename(oldPath, newPath, callback)
异步 rename().回调函数没有参数,但可能抛出异常。
2fs.ftruncate(fd, len, callback)
异步 ftruncate().回调函数没有参数,但可能抛出异常。
3fs.ftruncateSync(fd, len)
同步 ftruncate()
4fs.truncate(path, len, callback)
异步 truncate().回调函数没有参数,但可能抛出异常。
5fs.truncateSync(path, len)
同步 truncate()
6fs.chown(path, uid, gid, callback)
异步 chown().回调函数没有参数,但可能抛出异常。
7fs.chownSync(path, uid, gid)
同步 chown()
8fs.fchown(fd, uid, gid, callback)
异步 fchown().回调函数没有参数,但可能抛出异常。
9fs.fchownSync(fd, uid, gid)
同步 fchown()
10fs.lchown(path, uid, gid, callback)
异步 lchown().回调函数没有参数,但可能抛出异常。
11fs.lchownSync(path, uid, gid)
同步 lchown()
12fs.chmod(path, mode, callback)
异步 chmod().回调函数没有参数,但可能抛出异常。
13fs.chmodSync(path, mode)
同步 chmod().
14fs.fchmod(fd, mode, callback)
异步 fchmod().回调函数没有参数,但可能抛出异常。
15fs.fchmodSync(fd, mode)
同步 fchmod().
16fs.lchmod(path, mode, callback)
异步 lchmod().回调函数没有参数,但可能抛出异常。Only available on Mac OS X.
17fs.lchmodSync(path, mode)
同步 lchmod().
18fs.stat(path, callback)
异步 stat(). 回调函数有两个参数 err, stats,stats 是 fs.Stats 对象。
19fs.lstat(path, callback)
异步 lstat(). 回调函数有两个参数 err, stats,stats 是 fs.Stats 对象。
20fs.fstat(fd, callback)
异步 fstat(). 回调函数有两个参数 err, stats,stats 是 fs.Stats 对象。
21fs.statSync(path)
同步 stat(). 返回 fs.Stats 的实例。
22fs.lstatSync(path)
同步 lstat(). 返回 fs.Stats 的实例。
23fs.fstatSync(fd)
同步 fstat(). 返回 fs.Stats 的实例。
24fs.link(srcpath, dstpath, callback)
异步 link().回调函数没有参数,但可能抛出异常。
25fs.linkSync(srcpath, dstpath)
同步 link().
26fs.symlink(srcpath, dstpath[, type], callback)
异步 symlink().回调函数没有参数,但可能抛出异常。 type 参数可以设置为 'dir', 'file', 或 'junction' (默认为 'file') 。
27fs.symlinkSync(srcpath, dstpath[, type])
同步 symlink().
28fs.readlink(path, callback)
异步 readlink(). 回调函数有两个参数 err, linkString。
29fs.realpath(path[, cache], callback)
异步 realpath(). 回调函数有两个参数 err, resolvedPath。
30fs.realpathSync(path[, cache])
同步 realpath()。返回绝对路径。
31fs.unlink(path, callback)
异步 unlink().回调函数没有参数,但可能抛出异常。
32fs.unlinkSync(path)
同步 unlink().
33fs.rmdir(path, callback)
异步 rmdir().回调函数没有参数,但可能抛出异常。
34fs.rmdirSync(path)
同步 rmdir().
35fs.mkdir(path[, mode], callback)
S异步 mkdir(2).回调函数没有参数,但可能抛出异常。 访问权限默认为 0777。
36fs.mkdirSync(path[, mode])
同步 mkdir().
37fs.readdir(path, callback)
异步 readdir(3). 读取目录的内容。
38fs.readdirSync(path)
同步 readdir().返回文件数组列表。
39fs.close(fd, callback)
异步 close().回调函数没有参数,但可能抛出异常。
40fs.closeSync(fd)
同步 close().
41fs.open(path, flags[, mode], callback)
异步打开文件。
42fs.openSync(path, flags[, mode])
同步 version of fs.open().
43fs.utimes(path, atime, mtime, callback)
 
44fs.utimesSync(path, atime, mtime)
修改文件时间戳,文件通过指定的文件路径。
45fs.futimes(fd, atime, mtime, callback)
 
46fs.futimesSync(fd, atime, mtime)
修改文件时间戳,通过文件描述符指定。
47fs.fsync(fd, callback)
异步 fsync.回调函数没有参数,但可能抛出异常。
48fs.fsyncSync(fd)
同步 fsync.
49fs.write(fd, buffer, offset, length[, position], callback)
将缓冲区内容写入到通过文件描述符指定的文件。
50fs.write(fd, data[, position[, encoding]], callback)
通过文件描述符 fd 写入文件内容。
51fs.writeSync(fd, buffer, offset, length[, position])
同步版的 fs.write()。
52fs.writeSync(fd, data[, position[, encoding]])
同步版的 fs.write().
53fs.read(fd, buffer, offset, length, position, callback)
通过文件描述符 fd 读取文件内容。
54fs.readSync(fd, buffer, offset, length, position)
同步版的 fs.read.
55fs.readFile(filename[, options], callback)
异步读取文件内容。
56fs.readFileSync(filename[, options])
57fs.writeFile(filename, data[, options], callback)
异步写入文件内容。
58fs.writeFileSync(filename, data[, options])
同步版的 fs.writeFile。
59fs.appendFile(filename, data[, options], callback)
异步追加文件内容。
60fs.appendFileSync(filename, data[, options])
The 同步 version of fs.appendFile.
61fs.watchFile(filename[, options], listener)
查看文件的修改。
62fs.unwatchFile(filename[, listener])
停止查看 filename 的修改。
63fs.watch(filename[, options][, listener])
查看 filename 的修改,filename 可以是文件或目录。返回 fs.FSWatcher 对象。
64fs.exists(path, callback)
检测给定的路径是否存在。
65fs.existsSync(path)
同步版的 fs.exists.
66fs.access(path[, mode], callback)
测试指定路径用户权限。
67fs.accessSync(path[, mode])
同步版的 fs.access。
68fs.createReadStream(path[, options])
返回ReadStream 对象。
69fs.createWriteStream(path[, options])
返回 WriteStream 对象。
70fs.symlink(srcpath, dstpath[, type], callback)
异步 symlink().回调函数没有参数,但可能抛出异常。

相关文章:

第16节 Node.js 文件系统

Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API。 Node 导入文件系统模块(fs)语法如下所示: var fs require("fs") 异步和同步 Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本&#xff…...

【Linux网络篇】:从HTTP到HTTPS协议---加密原理升级与安全机制的全面解析

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:Linux篇–CSDN博客 文章目录 HTTPS协议原理一.预备知识1.什么是“加密”2.为什么要“加密”…...

jenkins结合gitlab实现CI

Jenkins结合GitLab实现CI(持续集成) 持续集成(Continuous Integration, CI)是一种软件开发实践,开发者在代码提交后,系统会自动进行构建、测试,从而尽早发现问题。Jenkins和GitLab的结合可以高效…...

SQL进阶之旅 Day 17:大数据量查询优化策略

文章标题 【SQL进阶之旅 Day 17】大数据量查询优化策略 文章内容 开篇 欢迎来到"SQL进阶之旅"系列的第17天!在前面的16天中,我们从基础的表设计、索引应用到复杂的窗口函数和高级索引策略,逐步深入探讨了SQL的核心技术。今天我们…...

字符串 金额转换

package heima.Test09;import java.util.Scanner;public class Money {public static void main(String[] args) {//1。键盘录入一个金额Scanner sc new Scanner(System.in);//请输入一个数据String result "";int money;while (true) {System.out.println("请…...

浅聊一下,大模型应用架构 | 工程研发的算法修养系列(二)

大模型应用架构基础 AI应用演进概述 人工智能应用的发展经历了多个关键阶段,每个阶段都代表着技术范式的重大转变。 大语言模型基础 大语言模型(LLM)作为现代AI应用的核心组件,具有独特的技术特性和能力边界,理解这些基础对架构设计至关重要。…...

装载机防撞系统:智能守护,筑牢作业现场人员安全防线

在尘土飞扬、机械轰鸣的建筑工地上,装载机是不可或缺的 “大力士”,承担着土方搬运、物料装卸等繁重任务。然而,传统作业模式下,装载机的安全隐患时刻威胁着现场人员的生命安全与工程进度。随着智能化技术的突破,唯创安…...

上门服务小程序订单系统框架设计

一、逻辑分析 上门服务小程序订单系统主要涉及服务展示、用户下单、订单处理、服务人员接单与服务完成反馈等核心流程。 服务展示:不同类型的上门服务(如家政、维修等)需要在小程序中展示详细信息,包括服务名称、价格、服务内容介…...

11.MySQL事务管理详解

MySQL事务管理详解 文章目录 MySQL事务管理 事务的概念 事务的版本支持 事务的提交方式 事务的相关演示 事务的隔离级别 查看与设置隔离级别 读未提交(Read Uncommitted) 读提交(Read Committed) 可重复读(Repeatabl…...

前端实现视频/直播预览

有一个需求:后端返回视频的预览地址,不仅要支持这个视频的预览,还需要设置视频封面。 这里有两种情况: 如果是类似.mp4,.mov等格式的视频可以选用原生 video 进行视频展示,并且原生的 video 也支持全屏、…...

React源码阅读-fiber核心构建原理

React源码阅读(2)-fiber核心构建原理 好的,我明白了。您提供的文本主要介绍了 React 源码中 Fiber 核心的构建原理,涵盖了从执行上下文到构建、提交、调度等关键阶段,以及相关的代码实现。 您提出的关联问题也很重要,它们深入探讨…...

视频监控管理平台EasyCVR与V4分析网关对接后告警照片的清理优化方案

一、问题概述​ 在安防监控、设备运维等场景中,用户将视频监控管理平台EasyCVR与V4网关通过http推送方式协同工作时,硬件盒子上传的告警图片持续累积,导致EasyCVR服务器存储空间耗尽,影响系统正常运行与告警功能使用。 二、解决方…...

基于 BGE 模型与 Flask 的智能问答系统开发实践

基于 BGE 模型与 Flask 的智能问答系统开发实践 一、前言 在人工智能快速发展的今天,智能问答系统成为了提升信息检索效率和用户体验的重要工具。本文将详细介绍如何利用 BGE(Base General Embedding)模型、Faiss 向量检索库以及 Flask 框架…...

机器学习:决策树和剪枝

本文目录: 一、决策树基本知识(一)概念(二)决策树建立过程 二、决策树生成(一)ID3决策树:基于信息增益构建的决策树。(二)C4.5决策树(三&#xff…...

vscode自定义主题语法及流程

vscode c/c 主题 DIY 启用自己的主题(最后步骤) 重启生效 手把手教你制作 在C:\Users\jlh.vscode\extensions下自己创建一个文件夹 里面有两个文件一个文件夹 package.json: {"name":"theme-jlh","displayName":"%displayName%&qu…...

vue中加载Cesium地图(天地图、高德地图)

目录 1、将下载的Cesium包移动至public下 2、首先需要将Cesium.js和widgets.css文件引入到 3、 新建Cesium.js文件,方便在全局使用 4、新建cesium.vue文件,展示三维地图 1、将下载的Cesium包移动至public下 npm install cesium后​​​​​​​ 2、…...

SpringBoot整合RocketMQ与客户端注意事项

SpringBoot整合RocketMQ 引入依赖&#xff08;5.3.0比较稳定&#xff09; <dependencies><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.3.1</version&…...

Github 2025-06-04 C开源项目日报 Top7

根据Github Trendings的统计,今日(2025-06-04统计)共有7个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目7C++项目1Assembly项目1jq:轻量灵活的命令行JSON处理器 创建周期:4207 天开发语言:C协议类型:OtherStar数量:27698 个Fork数量:1538 …...

大二下期末

一.Numpy&#xff08;Numerical Python&#xff09; Numpy库是Python用于科学计算的基础包&#xff0c;也是大量Python数学和科学计算包的基础。不少数据处理和分析包都是在Numpy的基础上开发的&#xff0c;如后面介绍的Pandas包。 Numpy的核心基础是ndarray&#xff08;N-di…...

LeetCode 热题 100 74. 搜索二维矩阵

LeetCode 热题 100 | 74. 搜索二维矩阵 大家好&#xff0c;今天我们来解决一道经典的算法题——搜索二维矩阵。这道题在 LeetCode 上被标记为中等难度&#xff0c;要求我们在一个满足特定条件的二维矩阵中查找一个目标值。如果目标值在矩阵中&#xff0c;返回 true&#xff1b…...

解决 VSCode 中无法识别 Node.js 的问题

当 VSCode 无法识别 Node.js 时&#xff0c;通常会出现以下症状&#xff1a; 代码提示缺失require 等 Node.js API 被标记为错误调试功能无法正常工作终端无法运行 Node.js 命令 常见原因及解决方案 1. Node.js 未安装或未正确配置 ​​解决方法​​&#xff1a; 确保已安…...

Mysql的卸载与安装

确保卸载干净mysql 不然在进行mysal安装时候会出现不一的页面和问题 1、卸载 在应用页面将查询到的mysql相关应用卸载 2、到c盘下将残留的软件包进行数据删除 3、删除programData下的mysql数据 4、检查系统中的mysql是否存在 cmd中执行 sc deleted mysql80 5、删除注册表中的…...

ES101系列09 | 运维、监控与性能优化

本篇文章主要讲解 ElasticSearch 中 DevOps 与性能优化的内容&#xff0c;包括集群部署最佳实践、容量规划、读写性能优化和缓存、熔断器等。 集群部署最佳实践 在生产环境中建议设置单一角色的节点。 Dedicated master eligible nodes&#xff1a;负责集群状态的管理。使用…...

Java常用的判空方法

文章目录 Java常用的判空方法JDK 自带的判空方法1. 使用 或 ! 运算符2. 使用 equals 方法3. Objects.isNull / Objects.nonNull4. Objects.equals4. JDK8 中的 Optional 第三方工具包1. Apache Commons Lang32. Google Guava3. Lombok 注解4. Vavr&#xff08;函数式风格&…...

Excel处理控件Aspose.Cells教程:使用 C# 在 Excel 中创建组合图表

可视化项目时间线对于有效规划和跟踪至关重要。在本篇教程中&#xff0c;您将学习如何使用 C# 在 Excel 中创建组合图。只需几行代码&#xff0c;即可自动生成动态、美观的组合图。无论您是在构建项目管理工具还是处理内部报告&#xff0c;本指南都将向您展示如何将任务数据转换…...

【多线程初阶】阻塞队列 生产者消费者模型

文章目录 一、阻塞队列二、生产者消费者模型(一)概念(二)生产者消费者的两个重要优势(阻塞队列的运用)1) 解耦合(不一定是两个线程之间,也可以是两个服务器之间)2) 削峰填谷 (三)生产者消费者模型付出的代价 三、标准库中的阻塞队列(一)观察模型的运行效果(二)观察阻塞效果1) 队…...

《100天精通Python——基础篇 2025 第5天:巩固核心知识,选择题实战演练基础语法》

目录 一、踏上Python之旅二、Python输入与输出三、变量与基本数据类型四、运算符五、流程控制 一、踏上Python之旅 1.想要输出 I Love Python,应该使用()函数。 A.printf() B.print() C.println() D.Print() 在Python中想要在屏幕中输出内容&#xff0c;应该使用print()函数…...

机器人夹爪的选型与ROS通讯——机器人抓取系统基础系列(六)

文章目录 前言一、夹爪的选型1.1 任务需求分析1.2 软体夹爪的选型 二、夹爪的ROS通讯2.1 夹爪的通信方式介绍2.2 串口助手测试2.3 ROS通讯节点实现 总结Reference: 前言 本文将介绍夹爪的选型方法和通讯方式。以鞋子这类操作对象为例&#xff0c;将详细阐述了对应的夹爪选型过…...

第二十八章 RTC——实时时钟

第二十八章 RTC——实时时钟​​​​​​​ 目录 第二十八章 RTC——实时时钟 1 RTC实时时钟简介 2 RTC外设框图剖析 3 UNIX时间戳 4 与RTC控制相关的库函数 4.1 等待时钟同步和操作完成 4.2 使能备份域涉及RTC配置 4.3 设置RTC时钟分频 4.4 设置、获取RTC计数器及闹钟 5 实时时…...

使用 DuckLake 和 DuckDB 构建 S3 数据湖实战指南

本文介绍了由 DuckDB 和 DuckLake 组成的轻量级数据湖方案&#xff0c;旨在解决传统数据湖&#xff08;如HadoopHive&#xff09;元数据管理复杂、查询性能低及厂商锁定等问题。该方案为中小规模数据湖场景提供了简单、高性能且无厂商锁定的替代选择。 1. 什么是 DuckLake 和 D…...