搜索文档
概念
- FS:File System 文件系统。
- fs 模块可以实现与硬盘的交互。例如文件的创建、删除、重命名、移动, 还有文件内容的写入、读取以及文件夹的相关操作。
写入文件
直接写入
导入 fs 模块
异步写入文件 fs.writeFile
- fs.writeFile(file, data[, options], callback)
- file 文件名(含目录,若目录或文件不存在,Node 会自动创建)。
- data 写入内容
- options 选项设置
可选 - callback 回调函数
代码
jsconst fs = require('fs'); fs.writeFile('./abc.md', '### 我是 H3\n#### 我是 H4', e => { if (e) { console.log('服务异常:', e); return; } console.log('成功'); })同步写入 fs.writeFileSync (效率低)
jsconst fs = require('fs'); fs.writeFileSync('./abc.md', '### 我是 H3\n#### 我是 H4');
追加写入
API
- 异步:appendFile
- 同步:appendFileSync
语法
javascriptfs.appendFile(file, data[, options], callback); fs.appendFileSync(file, data);参数:与 writeFile 一样
流式写入
API:
- 创建写入流对象 ws:createWriteStream(path)
- 写入内容:ws.write()
- 关闭通道:ws.close()
优势
- 适合写入一些大文件
- 持续写入文件,例如录屏
代码
jsconst fs = require('fs'); const ws = fs.createWriteStream('./Hello.md'); ws.write('# 一级标题\n'); ws.write('## 二级标题\n'); ws.write('### 三级标题'); ws.close();
文件读取
直接读取
API
- 异步:readFile
- 同步:readFileSync
语法
jsfs.readFile(文件路径[, 配置参数], 回调函数);回调函数:两个形参,参数一是错误对象,没有错误则为 null;参数二是读取到的内容的 Buff 对象。
代码
jsconst fs = require('fs'); fs.readFile('./Hello.md', (err, data) => { if (err) { console.log('读取失败'); return ; } console.log(data.toString()); })
流式读取
API
- 创建读取流对象 rs:fs.createReadStream('')
- 绑定事件:rs.on('事件名', '回调函数')
代码
jsconst fs = require('fs'); const rs = fs.createReadStream('./img.jpg'); // 绑定 data 事件,每次读取都会执行 rs.on('data', e => { console.log(e); // 64kb Buffer 对象 }) // 绑定 end 事件,读取结束后执行 rs.on('end', ()=> { console.log('读取完成'); })
复制文件
直接复制
js
const fs = require('fs');
let data = fs.readFileSync('./img.jpg'); // 读取
fs.writeFileSync('./img_copy.jpg', data); // 写入流式复制 1
js
const fs = require('fs');
const rs = fs.createReadStream('./img.jpg'); // 读取流对象
const ws = fs.createWriteStream('./img_copy.jpg'); // 写入流对象
rs.on('data', e => {
ws.write(e);
});
rs.on('end', () => {
ws.close();
})流式复制 2
js
const fs = require('fs');
const rs = fs.createReadStream('./img.jpg'); // 读取流对象
const ws = fs.createWriteStream('./img_copy.jpg'); // 写入流对象
rs.pipe(ws);区别
流式省内存,大文件优选流式。
重命名与移动
API
- 异步:fs.rename
- 同步:fs.renameSync
语法
jsfs.rename('旧路径', '新路径', 回调函数)代码
jsconst fs = require('fs'); fs.rename('./Hello.md', './Abc.md', e => { if (e) { console.log('操作失败'); return ; } console.log('操作成功'); });说明
- 若新路径与旧路径在同一目录时表示重命名,反之表示移动。
- 若移动,必须保证新路径对应的目录是存在的。
文件删除
API
- 异步:fs.unlink / fs.rm
- 同步:fs.unlinkSync / fs.rmSync
语法
jsfs.unlink('文件路径', 回调函数) fs.rm('文件路径', 回调函数)代码
jsconst fs = require('fs'); fs.rm('./Hello.md', e => { if (e) { console.log('删除失败'); return ; } console.log('删除成功'); })
文件夹操作
创建文件夹
API
- 异步:fs.mkdir
- 同步:fs.mkdirSync
语法
jsfs.mkdir('目录'[, '配置参数'], 回调函数)代码
jsconst fs = require('fs'); // 创建单个目录 fs.mkdir('./file', e => { if (e) { console.log('创建失败'); return ; } console.log('创建成功'); }); // 创建多级目录(递归) fs.mkdir('./file/img', { recursive: true }, e => { if (e) { console.log('创建失败'); return ; } console.log('创建成功'); });
读取文件夹
API
- 异步:fs.readdir
- 同步:fs.readdirSync
语法
jsfs.readdir('目录', 回调函数);回调函数:
- 形参一:错误对象
- 形参二:资源列表
代码
jsconst fs = require('fs'); fs.readdir('./', (err, data) => { if (err) { console.log('读取失败'); return ; } console.log(data); // 打印结果 [ 'file', 'index.js' ] });
删除文件夹
API
- fs.rmdir 即将废弃
- fs.rm 推荐使用
代码
jsconst fs = require('fs'); fs.rm('./file', { recursive: true } , e => { if (e) { console.log('删除失败'); return ; } console.log('删除成功'); });
查看文件/文件夹信息
API
- 异步:fs.stat
- 同步:fs.statSync
代码
jsconst fs = require('fs'); fs.stat('./Hello.md', (err, data) => { if (err) { console.log('操作失败'); return ; } console.log(data); // 文件信息 console.log(data.isFile()); // 是否为文件 console.log(data.isDirectory());// 是否为目录 })
__dirname
- __dirname 类似于一个全局变量。
- __dirname 中存放的是当前文件所在目录绝对路径。
