文件操作(nodejs内置模块的应用练习
同步异步读取文件的区别:
const fs = require('fs')
// 先试一试同步读取文件
let dirs = fs.readdirSync('./')
console.log(dirs)
//异步读取方式 错误的回调优先
fs.readdir('../nodejs',(err,data)=>{
// console.log(err)
// console.log(data)
if(err){
console.log('读取失败,请重新检查目录')
}else{
console.log(data)
}
});
tips: 在回调函数中第一个参数表示错误对象 默认为空null 如果出现错误err就是实体对象
//同步方法与异步方法的区别:
/**********************************************/
let dirs = fs.readdirSync('./无效路径')
console.log(233333)// 此时用同步操作233333不打印
console.log(dirs)
//如何用同步方法虽然程序出错但是继续执行到结束呢?
try {
let dirs = fs.readdirSync('./无效路径')
console.log(dirs)
} catch (error) {
console.log('!!!!!!出错了!!!!!!')
console.log(error)
}
console.log(233333)//try catch后 此时233333打印了
//然后再看异步操作
fs.readdir('./无效目录',(err,data)=>{
// console.log(err)
// console.log(data)
if(err){
console.log('读取失败,请重新检查目录')
}else{
console.log(data)
}
})
console.log(233333)//此时无trycatch 233333输出了
小总结:对于错误处理有两种情况 同步 异步
同步里面关键步骤要trycatch一下
异步需要回调函数 错误的回调优先
文件操作
// 文件操作 curd create update read delete
const fs = require('fs')
fs.mkdir('mkdirtest',(error , data)=> {
console.log(error)
console.log(data)//此行会输出undefined 那么为什么readdir 有俩参数
// mkdir只有一个参数呢?mkdir只有俩结果要么创建成功要么失败 读取文件你要知道读了啥
})
//文件更改
fs.rename('./mkdir.js','./mkdirtest.js',(err)=>{
if(err){
console.log(err)
console.log('失败')
}else{
console.log('更改成功')
}
})
//文件删除
fs.rmdir('./mkdirtest',(err)=>{
if (err) {
console.log('删除失败')
console.log(err)
}else{
console.log('OJBKKK')
}
})//此方法只能删除空文件夹
//如何删除文件夹及其中的所有文件呢? 这是网上的通过调用cmd命令来删除 但我没跑通..还有乱码 打个mark 日后再研究
var exec = require('child_process').exec;
var cmdStr = 'rm -rf ./mkdirtest';
exec(cmdStr, function (err, data) {
if (err) {
console.log(err);
} else {
console.log(data);
}
});
文件的两种写入方法:
- 直接write覆盖
const fs = require('fs')
// 创建文件 覆盖写入
fs.writeFile('./filetest.txt','today is the nice day',(err)=>{
console.log(err)
})
- 追加文件内容
// 追加写入
fs.appendFile('./filetest.txt',
',but i wanna fk the world',(err)=>{
console.log(err)
- 读文件
//读取
fs.readFile('./filetest.txt',(err,msg)=>{
console.log(err)
console.log(msg.toString('utf-8'))
//默认二进制数据流的buffer 可以在toString加入编码方式参数
})
- 删除文件
fs.unlink('./filetest.txt',(err)=>{
console.log(err)
})
文件列表的输出
const fs = require('fs')
//读取文件列表
fs.readdir('../nodejs',(err,dirs)=>{
for (let index = 0; index < dirs.length; index++) {
const code = dirs[index];
console.log(code)
}
console.log(err)
})
//判断是否是文件 还是文件夹
fs.stat('../nodejs',(err,status)=>{
if (status.isFile()) {
console.log('是文件')
}else{
console.log('是dir')
}
})