npm------Node.js文件读写功能fs模块fs.writeFile()、fs.writeFileSync()、fs.appendFile()等介绍

it2024-01-22  65

前言:fs模块是nodeJS软件自带的全局模块,无需单独下载直接require('fs')即可

一、使用NodeJs读取文件内容

读取文件内容

使用 fs.readFile() 方法,向其传入文件路径、编码、以及会带上文件数据(以及错误)进行调用的回调函数也可以使用同步的版本 fs.readFileSync(): const fs = require('fs') // js文件中导入对应fs模块:fs.readFile()|fs.readFileSync() fs.readFile('E:/前端目录/javascript面试demo/node/a.txt', 'utf-8', (err, data) => { if (err) { console.log('err: ', err); return; } console.log('data: ', data); }); ----------------------------------------------------------------------------------------- try { const data = fs.readFileSync('E:/前端目录/javascript面试demo/node/a.txt', 'utf8') console.log(data) } catch (err) { console.error(err) } 备注: fs.readFile() 和 fs.readFileSync() 都会在返回数据之前将文件的全部内容读取到内存中。 这意味着大文件会对内存的消耗和程序执行的速度产生重大的影响。 在这种情况下,更好的选择是使用流来读取文件的内容。

二、使用NodeJs写入文件内容和追加内容

文件写入功能

fs.writeFile() 和 同步方法 fs.writeFileSync() 写入文件 #### 写入文件(文件可以不存在,会自动添加改文件) // fs.writeFile() './a.txt' 指当前文件目录下的a.txt console.log(fs.writeFileSync('./a.txt', content, err => { console.log(err); })); // 同步的版本 fs.writeFileSync() try { const data = fs.writeFileSync('./a.txt', content) //文件写入成功。 } catch (err) { console.error(err) }

内容追加到文件末尾

fs.appendFile() 将内容追加到文件末尾(及其对应的 fs.appendFileSync()) #### 将内容追加到文件内容的末尾 fs.appendFile('./b.txt', content, err => { if (err) { console.error(err) return } //完成! }); 备注: 和写入文件(writeFile|writeFileSync)一样如果文件不存在,会创建出来对应文件并写入对应内容!!! 通过指定标志来修改默认的行为: r+ 打开文件用于读写。 w+ 打开文件用于读写,将流定位到文件的开头。如果文件不存在则创建文件。 a 打开文件用于写入,将流定位到文件的末尾。如果文件不存在则创建文件。 a+ 打开文件用于读写,将流定位到文件的末尾。如果文件不存在则创建文件。 主要就是fs.writeFile()里面使用指定标示:(后期要是遇到其他的再来添加) fs.writeFile('/Users/joe/test.txt', content, { flag: 'a+' }, err => {}) // 一直执行的话,不会覆盖掉原来的文件内容,而是在尾部继续追加内容; fs.writeFile('/Users/joe/test.txt', content, { flag: 'w+' }, err => {}) // 一直执行的话,会覆盖掉原来的文件内容,和不加flag属性功能一样; fs.writeFile('/Users/joe/test.txt', content, { flag: 'r+' }, err => {}) // 一直执行的话,会覆盖掉原来的文件内容,和不加flag属性功能一样;

三、在 Node.js 中使用文件夹

检测当前目录是否存在

fs.access(): 检查文件夹是否存在以及 Node.js 是否具有访问权限 ### 存在的话无返回信息;不存在的话err会返回报错信息 console.log(fs.access('./dist', err => { console.log('err: ', err); })) fs.existsSync(path) 以同步的方法检测目录是否存在。如果目录存在 返回 true ,如果目录不存在 返回false console.log(fs.existsSync('./dist')) // true

创建新的文件夹

fs.mkdir() 或 fs.mkdirSync() 创建新的文件夹 #### 直接创建对应目录,如果目录存在会报错。不会覆盖掉! fs.mkdir('a', err=> { console.log('err: ', err); }) try { if(!fs.existsSync('a')){ fs.mkdirSync('a') } } catch (error) { console.log('error: ', error); }

读取目录的内容

fs.readdir() 或 fs.readdirSync() 读取目录的内容,并返回它们的相对路径 #### 直接跟第一个参数路径,返回对应的目录内容 const fs = require('fs') const path = require('path') const folderPath = '/Users/joe' ##### 读取相对的目录内容 fs.readdirSync(folderPath) ##### 读取完整的路径下的目录内容 fs.readdirSync(folderPath).map(fileName => { return path.join(folderPath, fileName) })

重命名文件夹

fs.rename() 或 fs.renameSync() 可以重命名文件夹。 第一个参数是当前的路径,第二个参数是新的路径 ### 这种写法记得一定要都一个回调函数 fs.rename('a.txt', 'c.txt', err => { if (err) { console.log(err); } }) fs.renameSync() 是同步的版本:直接就是两个参数,后面不用加回调函数 try { fs.renameSync('a.txt', 'c.txt') } catch (err) { console.error(err) }

删除文件夹

fs.rmdir() 或 fs.rmdirSync() 可以删除空的文件夹 #### 只能删除空的文件夹 fs.rmdir('dist',err => {console.log(err)}) try { fs.rmdirSync('dist') } catch(err) { console.log(err) } #### 删除非空的文件夹要安装对应的替代插件(见下文) 执行代码: npm install fs-extra 或 yarn add fs-extra 添加到 dependencies 会添加到生产模式 fs.remove()和fs.removeSync()删除文件夹(包含非空文件夹):前提是下载新的替代插件fs-extra

执行代码:npm install fs-extra 或 yarn add fs-extra添加到 dependencies 会添加到生产模式

const fs = require('fs-extra'); #### 异步写法:最后要有回调函数 fs.remove('dist',err=> {console.log(err)}) #### 同步写法:可以直接删除文件夹,后面不强制加回调函数 try {fs.removeSync('dist)} catch (err) {console.log(err)} 结合promise或async/await异步处理函数 // 采用promise的形式来删除文件夹,它本身会返回一个promise对象; fs.remove('dist').then((res) => { console.log('res: ', res); }).catch((err) => { console.log('err: ', err); }) // 使用 async/await:成对出现 async function removeFolder(param) { try { await fs.removeSync(param) } catch (error) { console.log(error ); } } removeFolder('dist')

fs模块方法汇总如下:

无需安装。 作为 Node.js 核心的组成部分,可以通过简单地引用来使用它: const fs = require('fs') 一旦这样做,就可以访问其所有的方法,包括: fs.access(): 检查文件是否存在,以及 Node.js 是否有权限访问。 fs.appendFile(): 追加数据到文件。如果文件不存在,则创建文件。 fs.chmod(): 更改文件(通过传入的文件名指定)的权限。相关方法:fs.lchmod()、fs.fchmod()。 fs.chown(): 更改文件(通过传入的文件名指定)的所有者和群组。相关方法:fs.fchown()、fs.lchown()。 fs.close(): 关闭文件描述符。 fs.copyFile(): 拷贝文件。 fs.createReadStream(): 创建可读的文件流。 fs.createWriteStream(): 创建可写的文件流。 fs.link(): 新建指向文件的硬链接。 fs.mkdir(): 新建文件夹。 fs.mkdtemp(): 创建临时目录。 fs.open(): 设置文件模式。 fs.readdir(): 读取目录的内容。 fs.readFile(): 读取文件的内容。相关方法:fs.read()。 fs.readlink(): 读取符号链接的值。 fs.realpath(): 将相对的文件路径指针(...)解析为完整的路径。 fs.rename(): 重命名文件或文件夹。 fs.rmdir(): 删除文件夹。 fs.stat(): 返回文件(通过传入的文件名指定)的状态。相关方法:fs.fstat()、fs.lstat()。 fs.symlink(): 新建文件的符号链接。 fs.truncate(): 将传递的文件名标识的文件截断为指定的长度。相关方法:fs.ftruncate()。 fs.unlink(): 删除文件或符号链接。 fs.unwatchFile(): 停止监视文件上的更改。 fs.utimes(): 更改文件(通过传入的文件名指定)的时间戳。相关方法:fs.futimes()。 fs.watchFile(): 开始监视文件上的更改。相关方法:fs.watch()。 fs.writeFile(): 将数据写入文件。相关方法:fs.write()。 关于 fs 模块的特殊之处是,所有的方法默认情况下都是异步的,但是通过在前面加上 Sync 也可以同步地工作。 例如: fs.rename() fs.renameSync() fs.write() fs.writeSync() 这在应用程序流程中会产生巨大的差异。
最新回复(0)