一、简介
-
Node.js的fs模块用于与文件系统交互,提供了用于文件和目录的读取、写入、更新、删除等操作的方法。它是一个核心模块,无需安装即可使用。 -
在
Node.js中,首先需要通过require引入fs模块:const fs = require('fs');
二、常用方法
> 读取文件
-
异步读取
fs.readFile('example.txt', 'utf8', (err, data) => { if (err) { console.error('Error reading file:', err); return; } console.log('File content:', data); }); -
同步读取
try { const data = fs.readFileSync('example.txt', 'utf8'); console.log('File content:', data); } catch (err) { console.error('Error reading file:', err); }
> 写入文件
-
异步写入
fs.writeFile('example.txt', 'Hello, Node.js!', (err) => { if (err) { console.error('Error writing file:', err); return; } console.log('File written successfully!'); }); -
同步写入
try { fs.writeFileSync('example.txt', 'Hello, Node.js!'); console.log('File written successfully!'); } catch (err) { console.error('Error writing file:', err); }
> 追加内容
-
异步追加
fs.appendFile('example.txt', '\nThis is appended content.', (err) => { if (err) { console.error('Error appending content:', err); return; } console.log('Content appended successfully!'); }); -
同步追加
try { fs.appendFileSync('example.txt', '\nThis is appended content.'); console.log('Content appended successfully!'); } catch (err) { console.error('Error appending content:', err); }
> 删除文件
-
异步删除
fs.unlink('example.txt', (err) => { if (err) { console.error('Error deleting file:', err); return; } console.log('File deleted successfully!'); }); -
同步删除
try { fs.unlinkSync('example.txt'); console.log('File deleted successfully!'); } catch (err) { console.error('Error deleting file:', err); }
> 检查文件或目录是否存在
注意:
fs.exists已废弃,推荐使用fs.access。
-
异步方式
fs.access('example.txt', fs.constants.F_OK, (err) => { console.log(err ? 'File does not exist' : 'File exists'); }); -
同步方式
try { fs.accessSync('example.txt', fs.constants.F_OK); console.log('File exists'); } catch (err) { console.log('File does not exist'); }
> 读取目录内容
-
异步读取
fs.readdir('./', (err, files) => { if (err) { console.error('Error reading directory:', err); return; } console.log('Directory contents:', files); }); -
同步读取
try { const files = fs.readdirSync('./'); console.log('Directory contents:', files); } catch (err) { console.error('Error reading directory:', err); }
> 创建目录
-
异步创建
fs.mkdir('new-folder', (err) => { if (err) { console.error('Error creating directory:', err); return; } console.log('Directory created successfully!'); }); -
同步创建
try { fs.mkdirSync('new-folder'); console.log('Directory created successfully!'); } catch (err) { console.error('Error creating directory:', err); }
> 删除目录
-
异步删除
fs.rmdir('new-folder', (err) => { if (err) { console.error('Error deleting directory:', err); return; } console.log('Directory deleted successfully!'); }); -
同步删除
try { fs.rmdirSync('new-folder'); console.log('Directory deleted successfully!'); } catch (err) { console.error('Error deleting directory:', err); }
> 重命名文件或目录
-
异步重命名
fs.rename('old-name.txt', 'new-name.txt', (err) => { if (err) { console.error('Error renaming file:', err); return; } console.log('File renamed successfully!'); }); -
同步重命名
try { fs.renameSync('old-name.txt', 'new-name.txt'); console.log('File renamed successfully!'); } catch (err) { console.error('Error renaming file:', err); }
> 获取文件状态
-
异步方式
fs.stat('example.txt', (err, stats) => { if (err) { console.error('Error getting file stats:', err); return; } console.log('File stats:', stats); }); -
同步方式
try { const stats = fs.statSync('example.txt'); console.log('File stats:', stats); } catch (err) { console.error('Error getting file stats:', err); }
> 监视文件
-
使用
fs.watch可以监视文件或目录的更改。fs.watch('example.txt', (eventType, filename) => { console.log(`File ${filename} changed with event: ${eventType}`); });
三、常见错误处理
-
检查路径是否存在:使用
fs.access或fs.stat。 -
异步操作防止阻塞:尽量使用异步方法而不是同步方法。
-
权限问题:确保程序有权限操作指定文件或目录。
四、总结
-
异步优先:使用异步方法(带回调)能提高性能,避免阻塞事件循环。
-
模块化:复杂操作可以拆分成模块或函数,减少代码重复。
-
结合
path模块:配合path模块处理动态路径,避免跨平台路径问题。