Node.js 文件写入及文件夹交互操作

简介: Node.js 文件写入及文件夹交互操作

1、文件写入

在Node.js中写入文件最简单的方法是使用fs.writeFile()API。

1. const fs = require('fs');
2. const content = 'Some content!';
3. fs.writeFile('/Users/joe/test.txt', content, err => {
4. if (err) {
5.  console.error(err);
6.   }
7.  // file written successfully
8. });

1.1 同步写入文件

您可以使用同步版本fs.writeFileSync():

1. const fs = require('fs');
2. const content = 'Some content!';
3. try {
4.   fs.writeFileSync('/Users/joe/test.txt', content);
5. // file written successfully
6. } catch (err) {
7.  console.error(err);
8. }

您还可以使用fs/promises模块提供的基于promise的fsPromises.writeFile()方法:

1. const fs = require('fs/promises');
2. async function example() {
3. try {
4. const content = 'Some content!';
5. await fs.writeFile('/Users/joe/test.txt', content);
6.   } catch (err) {
7. console.log(err);
8.   }
9. }
10. example();

默认情况下,如果文件已经存在,则此API将替换文件的内容。

您可以通过指定标志来修改默认值:

fs.writeFile('/Users/joe/test.txt', content, { flag: 'a+' }, err => {});

标志

描述

不存在则创建

r+

此标志打开文件进行读取和写入

X

w+

此标志打开文件进行读取和写入,并将流定位在文件的开头

v

a

这个标志打开文件进行写入,它还将流定位在文件的末尾

v

a+

这个标志打开文件进行读写,它还将流定位在文件的末尾

v

1.2 将内容追加到文件

将内容附加到文件末尾的一个方便方法是fs.appendFile()(及其对应的fs.appentFileSync()):

1. const fs = require('fs');
2. const content = 'Some content!';
3. fs.appendFile('file.log', content, err => {
4. if (err) {
5.  console.error(err);
6.   }
7. // done!
8. });

下面是一个fsPromises.appendFile()示例:

1. const fs = require('fs/promises');
2. async function example() {
3. try {
4. const content = 'Some content!';
5. await fs.appendFile('/Users/joe/test.txt', content);
6.   } catch (err) {
7.  console.log(err);
8.   }
9. }
10. example();

2、文件夹交互

2.1 检查文件夹是否存在

使用fs.access()(及其基于promise的对应文件fsPromises.access())检查文件夹是否存在,Node.js是否可以使用其权限访问该文件夹。

标志

描述

F_OK

指示文件对调用进程可见的标志。这对于确定文件是否存在很有用,但没有说明rwx权限。如果未指定模式,则为默认值。

R_OK

指示调用进程可以读取文件的标志。

W_OK

指示调用进程可以写入文件的标志。

X_OK

指示该文件可以由调用进程执行的标志。这对Windows没有影响(其行为类似于fs.constants.F_OK)。

1. import { access, constants } from 'node:fs';
2. const file = 'package.json';
3. // 检查文件,是否存在当前目录
4. access(file, constants.F_OK, (err) => {
5. console.log(`${file} ${err ? 'does not exist' : 'exists'}`);
6. });
7. // 检查文件是否可读.
8. access(file, constants.R_OK, (err) => {
9. console.log(`${file} ${err ? 'is not readable' : 'is readable'}`);
10. });
11. // 检查文件是否可写.
12. access(file, constants.W_OK, (err) => {
13. console.log(`${file} ${err ? 'is not writable' : 'is writable'}`);
14. });
15. // 检查文件是否可读并可写.
16. access(file, constants.R_OK | constants.W_OK, (err) => {
17. console.log(`${file} ${err ? 'is not' : 'is'} readable and writable`);
18. });

2.2 创建新文件夹

可使用fs.mkdir()、fs.mkdirSync()或fsPromises.mkdir()创建新文件夹。

1. const fs = require('fs');
2. const folderName = '/Users/joe/test';
3. try {
4. if (!fs.existsSync(folderName)) {
5.    fs.mkdirSync(folderName);
6.   }
7. } catch (err) {
8.  console.error(err);
9. }

2.3 读取目录内容

使用fs.readir()、fs.readirSync()或fsPromises.readdir()读取目录的内容。

这段代码读取文件夹的内容,包括文件和文件夹:

1. const fs = require('fs');
2. const folderPath = '/Users/joe';
3. fs.readdirSync(folderPath);

返回它们的绝对路径:

1. fs.readdirSync(folderPath).map(fileName => {
2. return path.join(folderPath, fileName);
3. });

您也可以过滤结果以仅返回文件,并排除文件夹:

1. const isFile = fileName => {
2.  return fs.lstatSync(fileName).isFile();
3. };
4. fs.readdirSync(folderPath)
5.   .map(fileName => {
6. return path.join(folderPath, fileName);
7. })
8. .filter(isFile);

2.4 重命名文件夹

使用fs.rename()、fs.renameSync()或fsPromises.rename()重命名文件夹。第一个参数是当前路径,第二个参数是新路径:

1. const fs = require('fs');
2. fs.rename('/Users/joe', '/Users/roger', err => {
3. if (err) {
4.  console.error(err);
5.   }
6. // done
7. });

fs.renameSync()是同步版本:

1. const fs = require('fs');
2. try {
3.  fs.renameSync('/Users/joe', '/Users/roger');
4. } catch (err) {
5.  console.error(err);
6. }

fsPromises.rename()是基于promise的版本:

1. const fs = require('fs/promises');
2. async function example() {
3. try {
4.  await fs.rename('/Users/joe', '/Users/roger');
5.   } catch (err) {
6.  console.log(err);
7.   }
8. }
9. example();

2.5 删除文件夹

使用fs.rmdir()、fs.rmdirSync()或fsPromises.rmdir()删除文件夹。

1. const fs = require('fs');
2. fs.rmdir(dir, err => {
3. if (err) {
4.  throw err;
5.   }
6. console.log(`${dir} is deleted!`);
7. });

要删除包含内容的文件夹,请使用带有选项{recursive:true}的fs.rm()以递归方式删除内容。

{recursive:true,force:true}使其在文件夹不存在时忽略异常。

1. const fs = require('fs');
2. fs.rm(dir, { recursive: true, force: true }, err => {
3. if (err) {
4.  throw err;
5.   }
6.  console.log(`${dir} is deleted!`);
7. });


相关文章
|
3月前
|
JavaScript API
深入探索fs.WriteStream:Node.js文件写入流的全面解析
深入探索fs.WriteStream:Node.js文件写入流的全面解析
|
2月前
|
JavaScript
Node.js之文件夹的操作
Node.js之文件夹的操作
42 9
|
21天前
|
JavaScript 前端开发 内存技术
js文件的入口代码及需要入口代码的原因
js文件的入口代码及需要入口代码的原因
31 0
|
18天前
|
存储 JavaScript 前端开发
【JavaScript】网页交互的灵魂舞者
本文介绍了 JavaScript 的三种引入方式(行内、内部、外部)和基础语法,包括变量、数据类型、运算符、数组、函数和对象等内容。同时,文章还详细讲解了 jQuery 的基本语法和常用方法,如 `text()`、`html()`、`val()`、`attr()` 和 `css()` 等,以及如何插入和删除元素。通过示例代码和图解,帮助读者更好地理解和应用这些知识。
12 1
【JavaScript】网页交互的灵魂舞者
|
2月前
|
前端开发 JavaScript API
前端JS读取文件内容并展示到页面上
前端JavaScript使用FileReader API读取文件内容,支持文本类型文件。在文件读取成功后,可以通过onload事件处理函数获取文件内容,然后展示到页面上。
56 2
前端JS读取文件内容并展示到页面上
|
2月前
|
JavaScript 前端开发 数据安全/隐私保护
混淆指定js文件
【9月更文挑战第26天】JavaScript 混淆旨在保护代码知识产权、减小文件体积和提高安全性。方法包括变量名和函数名混淆、代码压缩、控制流平坦化及字符串加密。常用工具如 UglifyJS 和 JScrambler 可实现这些功能。然而,混淆可能带来兼容性和调试困难等问题,需谨慎使用并确保法律合规。
|
13天前
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
85 0
|
2月前
|
移动开发 JavaScript 前端开发
js之操作文件| 12-5
js之操作文件| 12-5
|
2月前
|
存储 JSON JavaScript
学习node.js十三,文件的上传于下载
学习node.js十三,文件的上传于下载
|
2月前
|
JavaScript 前端开发
JavaScript 与 DOM 交互
【9月更文挑战第01天】
28 2