Node.js 中的文件系统(fs)模块详解与代码示例

Node.js 中的文件系统(fs)模块详解与代码示例

Node.js 的 fs 模块提供了与文件系统交互的能力,包括文件的读写、目录的管理等。以下是 fs 模块中一些常用方法的详细解释和代码示例:

1. 异步读取文件内容

作用:异步读取文件的全部内容,并在回调函数中处理结果。

javascript 复制代码
const fs = require('fs');

// 异步读取文件内容
fs.readFile('example.txt', 'utf8', (err, data) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log(data); // 输出文件内容
});

2. 同步读取文件内容

作用:同步读取文件的全部内容,阻塞其他操作直到读取完成。

javascript 复制代码
const fs = require('fs');

try {
  // 同步读取文件内容
  const data = fs.readFileSync('example.txt', 'utf8');
  console.log(data); // 输出文件内容
} catch (err) {
  console.error(err);
}

3. 异步写入文件内容

作用:异步写入内容到文件,如果文件不存在则创建。

javascript 复制代码
const fs = require('fs');

// 异步写入文件内容
fs.writeFile('example.txt', 'Hello, World!', (err) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log('File written successfully'); // 文件写入成功
});

4. 同步写入文件内容

作用:同步写入内容到文件,如果文件不存在则创建,阻塞其他操作直到写入完成。

javascript 复制代码
const fs = require('fs');

try {
  // 同步写入文件内容
  fs.writeFileSync('example.txt', 'Hello, World!');
  console.log('File written successfully'); // 文件写入成功
} catch (err) {
  console.error(err);
}

5. 创建目录

作用 :异步创建一个目录,recursive 选项允许递归创建多级目录。

javascript 复制代码
const fs = require('fs');

// 异步创建目录
fs.mkdir('exampleDir', { recursive: true }, (err) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log('Directory created successfully'); // 目录创建成功
});

6. 删除目录

作用 :异步删除一个目录,recursive 选项允许递归删除目录及其内容。

javascript 复制代码
const fs = require('fs');

// 异步删除目录
fs.rmdir('exampleDir', { recursive: true }, (err) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log('Directory deleted successfully'); // 目录删除成功
});

7. 读取目录内容

作用:异步读取目录中的文件和子目录列表。

javascript 复制代码
const fs = require('fs');

// 异步读取目录内容
fs.readdir('exampleDir', (err, files) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log(files); // 输出目录内容列表
});

8. 获取文件状态

作用:异步获取文件的状态信息,如大小、创建时间等。

javascript 复制代码
const fs = require('fs');

// 异步获取文件状态
fs.stat('example.txt', (err, stats) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log(stats.isDirectory() ? 'Directory' : 'File'); // 判断是文件还是目录
});

9. 创建可读流

作用:创建一个可读流来异步读取文件内容。

javascript 复制代码
const fs = require('fs');
const readable = fs.createReadStream('example.txt');

readable.on('data', (chunk) => {
  console.log(chunk); // 输出读取的数据块
});

readable.on('end', () => {
  console.log('Reached end of file'); // 读取到文件末尾
});

readable.on('error', (err) => {
  console.error(err); // 错误处理
});

10. 创建可写流

作用:创建一个可写流来异步写入文件内容。

javascript 复制代码
const fs = require('fs');
const writable = fs.createWriteStream('example.txt');

writable.write('Hello, World!', (err) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log('File written successfully'); // 文件写入成功
});

writable.end(); // 标记流结束

这些示例展示了 fs 模块的基本用法,包括异步和同步操作,以及流的使用。在实际应用中,应该根据需要选择合适的方法,并妥善处理错误和异常。

相关推荐
我是华为OD~HR~栗栗呀6 小时前
华为OD-Java面经-21届考研
java·c++·后端·python·华为od·华为·面试
考虑考虑6 小时前
流收集器
java·后端·java ee
野犬寒鸦8 小时前
从零起步学习MySQL || 第十章:深入了解B+树及B+树的性能优势(结合底层数据结构与数据库设计深度解析)
java·数据库·后端·mysql·1024程序员节
上进小菜猪8 小时前
智能信创新范式:浙江省人民医院的全栈国产化与智能数据底座实践
后端
没有bug.的程序员9 小时前
Spring 常见问题与调试技巧
java·后端·spring·动态代理·1024程序员节
黎燃9 小时前
构筑自主可控医疗生态-数智融合新引擎-医疗全栈信创跃迁
后端
R.lin10 小时前
OSS服务模块-基于数据库配置的Java OSS服务解决方案,支持MinIO、七牛云、阿里云和腾讯云
java·数据库·后端·mysql
R.lin10 小时前
使用 Undertow 替代 Tomcat
java·后端·tomcat
Mintopia10 小时前
🇨🇳 Next.js 在国内场景下的使用分析与实践指南
前端·后端·全栈
程序员三明治11 小时前
Spring AOP:注解配置与XML配置双实战
java·后端·spring·代理模式·aop·1024程序员节