I/O:input output
对外部设备的输入输出
外部设备
- 磁盘
- 网卡
- 显卡
- 打印机
- 其他
IO的速度往往低于内存和CPU的交互速度
fs模块
读取一个文件 fs.readFile
const fs = require("fs");
const path = require("path");
const filename = path.resolve(__dirname, "./myfiles/1.txt");
fs.readFile(filename,"utf-8", (err, content) => {
console.log(content);
});
为什么执行回调函数:读取文件需要时间,I/O的处理时间远远大于内存与cpu之间的交互时间,如果同步写法,代码会卡住
同步写法: fs.readFileSync(filename,"utf-8") (不建议这样,有时候会等待时间过长)(一般Sync在程序启动时运行有限的次数即可使用)
ES6新写法:
async function test() {
const content =await fs.promises.readFile(filename,"utf-8");
console.log(content);
}
test();
向文件写入内容 fs.writeFile
fs.writeFile(filename, data[, options], callback)
- filename:写入文件路径
- data[String | Buffer]:写入内容
- options:- 可选参数,包含以下属性:
- encoding (String) :指定写入数据的编码,默认为 'utf8'。
- mode (Number) :指定文件的权限,默认为 0o666(即 438)。
- flag (String) :指定文件打开的行为,默认为 'w',表示覆盖写入。其他常见值包括 'a'(追加写入)和 'x'(如果文件存在则失败)。
- callback (Function) :必选参数,回调函数,接收一个参数
err,在写入失败时返回错误对象,成功时err为null。
const fs = require("fs");
const path = require("path");
const filename = path.resolve(__dirname, "./myfiles/2.txt");
async function test() {
// await fs.promises.writeFile(filename, "阿斯顿发发放到发", {
// flag: "a" // 追加内容
// });
const buffer = Buffer.from("abcde", "utf-8");
await fs.promises.writeFile(filename, buffer);
console.log("写入成功");
}
test();
注意:如果文件不存在,会自动创建一个,但是目录不存在会报错
获取文件或目录信息 fs.stat
s.stat 是 Node.js 文件系统(fs)模块中的一个方法,用于获取文件或目录的详细信息。它返回一个 stats 对象,该对象包含关于文件或目录的各种元数据
- size: 占用字节
- atime: 上次访问时间
- mtime: 上次文件内容被修改时间
- ctime: 上次文件状态被修改时间
- birthtime: 文件创建时间
- isDirectory(): 判断是否是目录
- isFile(): 判断是否是文件 示例:
const fs = require('fs');
fs.stat('example.txt', (err, stats) => {
if (err) {
console.error('发生错误:', err);
return;
}
if (stats.isFile()) {
console.log('这是一个文件');
} else if (stats.isDirectory()) {
console.log('这是一个目录');
} else {
console.log('这是其他类型的文件系统对象');
}
});
获取目录中的文件和子目录 fs.readdir
fs.readdir 用于读取指定目录的内容,返回该目录下的所有文件和子目录的列表。
const fs = require('fs');
fs.readdir('./my-directory', 'utf8', (err, files) => {
if (err) {
console.error('读取目录失败:', err);
return;
}
console.log('目录内容:', files);
});
创建目录 fs.mkdir
fs.mkdir 用于创建新目录。如果父目录不存在,可以通过设置选项来递归创建。
const fs = require('fs');
// 创建单层目录
fs.mkdir('./new-directory', '0755', (err) => {
if (err) {
console.error('创建目录失败:', err);
return;
}
console.log('目录创建成功');
});
// 创建多层目录(递归)
fs.mkdir('./parent-directory/child-directory', { recursive: true }, (err) => {
if (err) {
console.error('创建目录失败:', err);
return;
}
console.log('多层目录创建成功');
});
判断文件或目录是否存在 fs.access
fs.access 用于检查文件或目录是否存在,并验证其权限。
const fs = require('fs');
// 检查文件或目录是否存在
fs.access('./example.txt', fs.constants.F_OK, (err) => {
if (err) {
console.error('文件或目录不存在');
} else {
console.log('文件或目录存在');
}
});
// 检查文件是否可读
fs.access('./example.txt', fs.constants.R_OK, (err) => {
if (err) {
console.error('文件不可读');
} else {
console.log('文件可读');
}
});