fs(File System) 模块可用于与文件系统进行交互,所有的文件系统操作都具有同步的、异步的形式。
在 fs 模块中,所有的方法都分为同步和异步两种实现,具有 sync 后缀的方法为同步方法,不具有 sync 后缀的方法为异步方法。在实际开发中建议大家使用异步的形式,异步的形式性能更高,熟读更快,而且没有阻塞。
官方中文手册 : http://nodejs.cn/api/fs.html
//1.加载fs模块
const fs = require('fs');
/*
2.向文件中写入内容
fs.writeFile(file, data[, options], callback) 异步地将数据写入到一个文件,如果文件已存在则覆盖该文件。
file:写入文件的路径
data:写入文件的内容,可以是字符串或 buffer
options:可选,该参数是个对象或字符串,包含{encoding,mode,flag};
encoding文件的字符编码, 默认值: 'utf8'
mode设置文件模式,默认值: 0o666
flag 文件系统标志,默认值: 'w'
callback:回调函数,回调会传入一个参数 (err),err是异常
*/
fs.writeFile('E:/a.txt','Node.js',(err)=>{
//判断是否出现错误
if(err){
console.log('向文件中写入内容失败');
}
});
/*
3.向文件中追加内容
fs.appendFile(path, data[, options], callback) 异步地追加数据到文件,如果文件尚不存在则创建文件。
file:写入文件的路径
data:写入文件的内容,可以是字符串或 buffer
options:可选,该参数是个对象或字符串,包含{encoding,mode,flag}
encoding文件的字符编码, 默认值: 'utf8'
mode设置文件模式,默认值: 0o666
flag 文件系统标志,默认值: 'w'
callback:回调函数,
*/
fs.appendFile('E:/a.txt','技术','utf8',(err)=>{
if(err){
console.log('向文件中追加内容失败');
}
});
/**
4.从文件中读取内容
readFile(path[, options], callback) 异步地读取文件的全部内容。
path:要读取的文件路径
options:可选,该参数是个对象,包含{encoding,mode,flag};
encoding 默认值: null
flag 默认值: 'r'
callback:回调函数,回调会传入两个参数 (err, data),其中 data 是文件的内容。如果没有指定字符编码,则返回原始的 buffer。
*/
fs.readFile('E:/a.txt',(err,data)=>{
//判断是否出现错误
if(err){
//出现错误,回调函数的中代码就不要继续往后执行,所以使用return的方式,组织代码继续执行
return console.log("从文件中读取内容失败");
}
//通过调用toString()方法将二进制数据转换为字符
console.log(data.toString());
});
/*
文件拷贝
*/
//1.加载fs模块
const fs = require('fs');
/**
* fs.copyFile(src, dest[, mode], callback)异步地文件拷贝,默认情况下,如果目标文件名已经存在,则覆盖它。
* src 要拷贝的源文件名。
* dest 拷贝操作的目标文件名。
* mode 用于拷贝操作的修饰符。默认值: 0。可选的整数,指定拷贝操作的行为。
* callback 回调函数。
*/
fs.copyFile('e:/a.txt','e:/b.txt',(err)=>{
if(err){
return console.log('文件拷贝失败')
}
console.log('文件拷贝中...');
console.log('文件拷贝成功');
});
/**
* 拷贝操作的修饰符
* fs.constants.COPYFILE_EXCL - 如果目标文件名已存在,则拷贝操作将失败。
*/
fs.copyFile('e:/a.txt','e:/b.txt',fs.constants.COPYFILE_EXCL,(err)=>{
if(err){
return console.log('文件拷贝失败')
}
console.log('文件拷贝中...');
console.log('文件拷贝成功');
});
//fs.Stats 类
//fs.Stats 对象提供了关于文件的属性。
//加载fs模块
const fs = require('fs');
/*
stat(path[, options], callback)异步返回Stats类
path:文件的路径
callback:回调函数,回调有两个参数 (err, stats),其中 stats 是 fs.Stats 对象。
*/
fs.stat('e:/a.txt',(err,stats)=>{
if(err){
return console.log(`获取文件信息失败`);
}
console.log(`是否是文件:${stats.isFile()}`);
console.log(`是否是目录:${stats.isDirectory()}`);
console.log(`上次访问此文件的时间戳 ${stats.atime}`);
})
创建文件夹
const fs = require('fs');
//创建文件夹
/**
* mkdir(path[, options], callback)
* path:要创建的文件路径
* option:可选,包括
* recursive属性:表示是否创建父目录,默认为false
* mode属性:表示权限和粘滞位 在Windows上不支持,默认值为0o777。
* callback:回调函数
*/
//注意:当 path 是已存在的目录时,调用 fs.mkdir() 仅在recursive为false 时才会导致错误。
fs.mkdir('e:/test',(err)=>{
if(err){
return console.log('e:/test文件创建失败');
}
console.log('e:/test文件创建成功');
});
//recursive属性为false时,不会创建父目录;为true时,会创建父目录。
fs.mkdir('e:/test1/test',{recursive:true},(err)=>{
if(err){
return console.log('e:/test1/test文件创建失败');
}
console.log('e:/test1/test文件创建成功');
});
//读取目录的内容
fs.readdir('C:/Users/Administrator/Desktop/code/chapter4/',(err,files)=>{
if(err){
console.log("读取目录失败");
}
files.map(file=>{
console.log(file);
})
});
//重命名文件夹
fs.rename('e:/test1','e:/tests',(err)=>{
if(err){
console.log("重命名失败");
return;
}
console.log("重命名成功!");
});
//重命名文件
fs.rename('e:/b.txt','e:/c.txt',(err)=>{
if(err){
console.log("重命名失败");
return;
}
console.log("重命名成功!");
});
const fs = require('fs');
//删除文件夹
/**
* fs.rmdir(path[, options], callback)删除文件夹时,要求该文件夹必须为空
* options 对象类型,可选
* maxRetries 当recursive为true时,遇到错误的时,重试的次数。默认为0
* recursive 是否执行递归目录删除,默认为false
* retryDelay 当recursive为true时,重试之间等待的时间(以毫秒为单位),默认为100
*/
fs.rmdir('e:/test',(err)=>{
if(err){
console.log('删除e:/test文件夹失败');
return;
}
console.log('删除e:/test文件夹成功');
});
fs.rmdir('e:/tests',(err)=>{
if(err){
console.log('删除e:/tests文件夹失败');
return;
}
console.log('删除e:/tests文件夹成功');
});
执行结果:
所以当我们删除一个文件夹时,需要先读取文件夹和删除文件。这样来删除一个文件夹就相对复杂。在这种情况下,最好安装 fs-extra 模块,该模块非常受欢迎且维护良好。 它是 fs 模块的直接替代品,在其之上提供了更多的功能。
//加载第三方模块
const fs = require('fs-extra');
//删除文件夹
fs.remove('e:/tests',(err)=>{
if(err){
console.log('删除e:/tests文件夹失败');
return;
}
console.log('删除e:/tests文件夹成功');
});
欢迎大家阅读,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位指点,在此表示感激不尽。文章持续更新中…