快速上手 - fs 文件系统模块 ¶
本文导航
作者:KK
发表日期:2018.5.15
fs 就是 file system 的缩写,这个模块提供了一套接口让我们操作磁盘上的文件:
基本了解 ¶
let fs = require('fs');
fs.writeFileSync('D:/path/to/aaa.txt', 123); //将 123 这个内容写入 /path/to/abc.txt 中,如果没有这个文件就创建这个文件
let fileContent = fs.readFileSync('D:/path/to/aaa.txt'); //从文件中读出内容赋值给变量
console.log('文件内容', fileContent);
异步操作 ¶
nodejs 几乎为每种文件的操作都提供了2个功能相同的API,一个是同步的,执行完才会运行下一句代码,另一个是异步的,相当于ajax一样,看看:
let fs = require('fs');
fs.writeFile('aaa.txt', 123, (error) => {
if(error){
console.error('写入文件出错:', error)
}else{
console.log('文件写入完毕');
}
});
console.log('已经执行了写文件操作,写没写完就不知道咯');
writeFileSync
和writeFile
都是写文件,Sync表示同步的,没有Sync表示异步的,调用异步操作时需要传入一个回调函数,在写完后触发这个回调,所以我就说跟ajax一样。
在 nodejs 中比较提倡使用异步操作,因为异步比同步的性能高出许多个数量级,具体的性能分析请上网搜索node 异步和同步性能,除了文件以外还有网络 API 也有异步的,以后会接触到。
常用的 API ¶
写文件 writeFile ¶
上面示都例过了我就不写代码了,异步writeFile(file, data[, options], callback)
,同步writeFileSync(file, data[, options])
,而文件不存在时会自动创建。
读文件 readFile ¶
异步:readFile(path[, options], callback)
//以utf8编码读出内容
let fs = require('fs');
fs.readFile('aaa.txt', 'utf-8', (error, content) => {
if(error){
console.error('读取文件出错', error);
}else{
console.log(content);
}
});
//以二进制方式读出内容
fs.readFile('aaa.txt', (error, content) => {
if(error){
console.error('读取文件出错', error);
}else{
console.log(content);
}
});
同步:readFileSync(path[, options])
let fs = require('fs');
let content = fs.readFileSync('aaa.txt', 'utf-8'); //utf8编码读出
console.log(content);
let binaryContent = fs.readFileSync('aaa.txt'); //二进制读出
console.log(binaryContent);
获取文件摘要+判断文件是否存在 stat ¶
以前有专门判断文件是否存在的接口,后来的版本就推荐使用stat
这个方法了,它既能获取文件的摘要信息,也能判断文件是否存在
异步:stat(path, callback)
let fs = require('fs');
fs.stat('aaa.txt', (error, statInfo) => {
if(error){
if(error.errno === -4058){
console.error('文件不存在', error);
}else{
console.error('获取文件摘要信息出错', error);
}
}else{
console.log(statInfo);
}
});
同步:statSync(path)
let fs = require('fs');
let statInfo = fs.statSync('aaa.txt');
console.log(statInfo);
删除文件 unlink ¶
异步:unlink(path, callback)
let fs = require('fs');
fs.unlink('aaa.txt', (error) => {
if(error){
console.error('删除文件失败', error);
}else{
console.log('删除完毕');
}
});
同步:unlinkSync(path)
let fs = require('fs');
let result = fs.unlinkSync('aaa.txt');
console.log(result); //undefined 不会有结果返回,但一般只要不抛出异常就是正常删除了
if(!fs.statSync('aaa.txt')){
console.log('文件不存在,确实删除掉咯');
}
追加文件内容 appendFile ¶
异步:appendFile(file, data[, options], callback)
let fs = require('fs');
fs.appendFile('aaa.txt', '异步追加的内容', (error) => {
if(error){
console.error('追加文件内容出错', error);
}else{
console.log('追加文件内容成功');
}
});
异步:appendFileSync(file, data[, options])
let fs = require('fs');
fs.appendFileSync('aaa.txt', '同步追加的内容');
console.log('追加文件内容成功');
读取目录的文件列表 readdir ¶
异步:readdir(path[, options], callback)
let fs = require('fs');
fs.readdir('./', (error, files) => {
if(error){
return console.error(error);
}
for(let i in files){
console.log(files[i]);
}
});
同步:readdirSync(path[, options])
let fs = require('fs');
let files = fs.readdirSync('./');
for(let i in files){
console.log(files[i]);
}
删除文件 unlink ¶
异步:unlink(path, callback)
let fs = require('fs');
fs.unlink('aaa');
同步:unlinkSync(path)