path模块

主要对路径和文件相关的进行处理。

在开发过程中,我们可以用字符串拼接的方式来指定路径,但是考虑到不同操作系统对于路径分隔符的差异,可能导致的兼容性问题,我们采用path模块中的resolve方法来对路径进行处理,它会根据操作系统,来指定适配的路径分隔符。

const path = require('path');

const basePath = 'User/why';
const filename = 'abc.txt';

const filepath = path.resolve(basePath, filename)

console.log(filepath)

PS C:\Users\starry\Desktop\total\node\04_node内置模块\02_path> node 01_路径的演练.js   
C:\Users\starry\Desktop\total\node\04_node内置模块\02_path\User\why\abc.txt

可以采用同步、异步、promise方式来加载文件信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const fs = require('fs');
const filepath = './abc.txt';
// 案例 读取文件信息 同步方式


// const info = fs.statSync(filepath);

// console.log(info);
// console.log('后续执行的代码')

// 方式二 异步操作

// fs.stat(filepath, (err,info) => {
// if(err) {
// console.log(err);
// return;
// }
// console.log(info);
// })
// console.log("后续需要执行的代码");


// 方式三 promise

fs.promises.stat(filepath).then(info => {
console.log(info);
}).catch(err => {
console.log(err)
})

console.log("后面需要执行的代码")

第一种方式因为同步会阻塞,会先打印info信息,后两种方式则会先打印 后续需要执行的代码 这一段内容。

文件描述符

在node的文件系统中可以通过传递文件描述符,来对文件进行操作。

// 文件描述符
fs.open("./abc.txt",(err, fd) => {
    if(err){
        console.log(err);
        return;
    }
   // 通过描述符去获取文件的信息

fs.fstat( fd , (err,info) => {
    if(err){
        console.log(err);
        return;
    }
    console.log(info);
    
})
})

文件信息

文件的读写

const fs = require('fs')

const content = "你好啊,前端程序员";
const filePath = "./abc.txt";
fs.writeFile(filePath, content, (err) => {
    console.log(err)
})


fs.readFile(filePath, {encoding: 'utf-8'}, (err, data) => {
    console.log(data);
});

文件夹的操作

  1. 创建文件夹
  2. 读取文件夹中的所有文件夹
  3. 文件夹的命名

文件夹的相关操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const fs = require('fs');
const path = require('path');
const dirname = './why'
// try {
// if (!fs.existsSync(dirname)) {
// fs.mkdirSync(dirname);
// }
// } catch (err) {
// console.error(err)
// }
function getFiles(dirname) {
fs.readdir(dirname, {withFileTypes: true}, (err, files) => {
for (let file of files) {
if(file.isDirectory()){
const filepath = path.resolve(dirname,file.name);
getFiles(filepath);
}
else {
console.log(file.name);
}
}
})
}
getFiles(dirname);


事件触发器