1、fs 文件系统模块
fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求,该模块的所有方法都有同步和异步两种方式。
JavaScript 的是没有操作文件的能力,但是 Node 是可以做到的,Node 提供了操作文件系统模块,是 Node 中使用非常重要和高频的模块,是绝对要掌握的一个模块系统。
导入:
const fs = require('fs');// 导入
1).读取
1. 异步读取 readFile
fs.readFile( path [, option] ,callback)
path :读取文件地址
option :参数 (可选)
callback :回调函数
fs.readFile('./files/01.txt', 'utf8', function (codeInfo, dataStr) {
console.log(codeInfo);
console.log(dataStr);
})
callback 返回两个参数,第一个参数是codeInfo:失败信息,第二个是dataStr: 读取到的数据
读取成功:第一个参数 null,第二个参数是读取数据
读取失败:第一个参数为 失败信息对象,第二个 返回 undefined
2. 同步读取 readFileSync
fs.readFileSync( path ,[, option] ) 没有 callback 回调方法
path :读取文件地址
option :参数 (可选)
let a = fs.readFileSync('./files/01.txt', 'utf8')
console.log(a);// 读取的数据内容
3. 流式读取 createReadStream
每次差不多最多读取 64kb 内容
fs.createReadStream( path )
path :读取文件地址
fs.createReadStream( path ) // 与文件建立链接
xx.on(‘data’, res=>{}) // 绑定事件,获取读取数据 res 就是读取数据
let a = fs.createReadStream('./files/cs75plus.mp4');// 和文件建立链接
a.on('data', res => {
console.log(res.length); // 65536 ,每次差不多读取 64kb 内容大小
})
// 读取完成
a.on('end', () => {
console.log('读取完成');
})
2). 写入
1. 异步写入 writeFile
fs.writeFile( path , con [, option] ,callback )
path :写入地址
con :写入内容
option :参数 (可选)
callback :回调函数
fs.writeFile('./files/02.txt', '我是写入的内容', function (errInfo) {
console.log(errInfo);
})
errInfo:写入成功返回 null,写入失败 返回失败信息对象
2. 同步写入 writeFileSync
fs.writeFileSync( path , con [, option]) 没有 callback 回调函数
path :写入地址
con :写入内容
option :参数 (可选)
fs.writeFileSync('./files/02_test.txt', '同步写入的内容!')
3. 追加写入 appendFile
fs.appendFile( path , con [, option], callback )
path :写入地址
con :写入内容
option :参数 (可选)
callback :回调函数
fs.appendFile("./files/02.txt", ',追加内容', (err) => {
console.log(err);
})
writeFile 和 writeFileSync 也可以追加写入
option 参数,写成 { flag:‘a’ }:也可表示追加内容
fs.writeFile('./files/02.txt', '追加内容', { flag: 'a' }, function (res) {})
4. 流式写入 createWriteStream
fs.createWriteStream( path )
path :写入地址,没有回自动创建
步骤:
fs.createWriteStream( path ); // 和 文件创建链接通道
xx.write( con ) // 写入
xx.close(); // 和 文件断开链接 (可写可不写,代码执行完成,会自动断开)
const ws = fs.createWriteStream('./files/02_流式写入.txt');// 建立链接
ws.write('1\n')//写入
ws.write('2\n')//写入
ws.write('3\n')//写入
ws.close();// 断开链接,可不写
3). 路径 问题 解决方案
因为你路径如果是相对路径 ./或…/ 时,路径容器出错;node 执行是在当前所处目录执行。不能每个 代码位置都 在根目录吧,所以需要解决 路径问题:
1、第一种:绝对路径 (不利于维护)
fs.readFile('C:\\Users\\LYY\\Desktop\\node.js\\files\\03.练习,成绩.txt')
2、第二种:__dirname 变量:表示 当前文件所处目录路径
fs.readFile( __dirname +'/files/03.练习,成绩.txt');// 不管你在哪个目录运行这个js,__dirname 都会指向 这个js文件的目录
第三种:path
const path = require('path');// 导入
let url = path.join(__dirname,'/files/03.练习,成绩.txt');// 也借用了__dirname,拼接两个路径