持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情
上一篇学习了文件系统模块的文件读取、写入等知识,今天来学习文件的打开、关闭以及文件目录的相关操作
打开文件
语法格式:fs.open(path, flags[, mode], callback)
参数说明:
- path - 文件的路径。
- flags - 文件打开的行为。相关值可以查阅官方文档
- mode - 设置文件模式(权限),文件创建默认权限为 0o666(可读,可写)。
- callback - 回调函数,带有两个参数如:callback(err, fd)。
在回调函数中获取文件描述符fd,相当于给文件取了个名字,后面就可以通过文件描述符对文件进行操作。
在hello.js文件中写入如下代码,并在同级目录下新建input.txt文本文档,并写入好好学习
// 异步打开文件
console.log("准备打开文件!");
fs.open('input.txt', 'r+', function(err, fd) {
if (err) {
return console.error(err);
}
console.log("文件打开成功!");
console.log('fd:',fd)
let data = fs.readFileSync(fd,'utf8')
console.log('data:',data)
});
关闭文件
语法格式:fs.close(fd, callback)
该方法使用了文件描述符来读取文件。
参数说明:
- fd - 通过 fs.open() 方法返回的文件描述符。
- callback - 回调函数,没有参数。
使用 close关闭文件 ,再使用 open 打开新的文件时,并不会创建一个新的文件描述符,而是复用原来的,只不过将存储的路径做了替换。
const fs = require('fs')
fs.open('1.txt','r',(err,fd)=>{
console.log('fd',fd)
let data1 = fs.readFileSync(fd,'utf8')
console.log('data1:',data1)
fs.close(fd,err=>{
console.log('关闭成功!')
fs.open('2.txt','r',(err,fd)=>{
console.log('new fd:',fd)
let data2 = fs.readFileSync(fd,'utf8')
console.log('data2:',data2)
})
})
})
目录操作
1、创建目录
语法格式:
fs.mkdir(path[, mode], callback)
在创建目录的过程中,必须保证传入的路径前面的文件目录都存在,否则会抛出异常。
//异步创建目录方法
fs.mkdir(path.join(__dirname,'abc'),(err)=>{
if(!err){ console.log('文件夹创建成功!') }
});
//同步创建目录方法 `mkdirSync` 方法参数为一个目录的路径,没有返回值,
fs.mkdirSync(path.join(__dirname,'hello'));
2、读取目录
语法格式:
fs.readdir(path[, options], callback)
fs.readdir(__dirname,(err,files)=>{
files.forEach((item,index)=>{
//文件信息获取
fs.stat(path.join(__dirname,item),(err,stat)=>{
if(stat.isFile()){
console.log(item,'文件');
}else if(stat.isDirectory()){
console.log(item,'目录');
}
});
});
});
//同步方法 fs.readdirSync(path[, options])
let files = fs.readdirSync(__dirname);
files.forEach((item,index)=>{
fs.stat(path.join(__dirname,item),(err,stat)=>{
if(stat.isFile()){
console.log(item,'文件');
}else if(stat.isDirectory()){
console.log(item,'目录');
}
});
});
3、删除目录
语法格式:
fs.rmdir(path, callback)
删除文件目录时必须保证文件目录的路径存在,且被删除的文件目录为空,即不存在任何文件夹和文件。
fs.rmdir(path.join(__dirname,'abc'),(err)=>{
console.log(err);
});
//同步方法 fs.rmdirSync(path)
fs.rmdirSync(path.join(__dirname,'qqq'));