node(2)

node.js中fs模块系统的使用:

Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。
异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。
建议大家使用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞

1.读取文件:

读取文件:readFile(filename,[options],callback);
filename, 必选参数,文件名
[options],可选参数,可指定flag 默认为‘r’,encoding 默认为null,在读取的时候,需要手动指定
callback 读取文件后的回调函数,参数默认第一个err,第二个data 数据

//文件流模块 fs
//fs node 的内置模块 文件模块 文件读取写入之类的事情
//1.引入文件模块
const fs=require("fs");
module.exports=()=>{
	//readFile 异步读取
    fs.readFile("public/mongodb.txt",(err,data) => {
        if(err){
            throw err;
        }
        let buf=new Buffer(data);
       console.log(data.toString("utf-8"));
    });
    //同步读取方法 readFileSync
    let a=fs.readFileSync("public/mongodb.txt","utf-8");
    console.log(a);
 }

2.打开文件

打开文件:fs.open(filename, flags, [mode], callback);
filename, 必选参数,文件名
flags, 操作标识,如"r",读方式打开,r+可读可写
[mode],设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。
callback 打开文件后回调函数,参数默认第一个err,第二个fd为一个整数,表示打开文件返回的文件描述符,window中又称文件句柄

//异步打开文件夹
	fs.open("public","r+",(err,id)=>{
   	     if(err){
    	         console.log("打开文件失败")
    	         throw err;
    	     }
         console.log("当前文件已经打开");
     });
     //同步打开文件
    let b=fs.openSync("public","r+")
    console.log(b);

3.获取文件信息

.获取文件信息:fs.stat(path, callback)
path - 文件路径。
callback - 回调函数,带有两个参数如:(err, stats), stats 是 fs.Stats 对象

fs.stat("public",(err,stat)=>{
        if(err){
            throw err;
        }
        //console.log(stat)//输出文件的相关信息
        //stat返回值里面的方法
        //isFile 检测当前文件是文件还是文件夹  true
        //isDirectory 检测当前文件是文件还是文件夹 true
        console.log(stat.isFile());
        console.log(stat.isDirectory());
    });

4.写入文件

创建并写入文件:fs.writeFile(filename,data,[options],callback);
filename, 必选参数,文件名
data, 写入的数据,可以字符或一个Buffer对象
[options],flag 默认‘2’,mode(权限) 默认‘0o666’,encoding 默认‘utf8’
callback 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。

 fs.writeFile("public/mode.txt","我想学习","utf-8"(err)=>{
        if(err){
            throw err;
        }
    });
    //同步写入
    fs.writeFileSync("public/mode.txt","我在学习中","utf-8"");
    //异步方法 appendFile 追加写入
    fs.appendFile("public/mode.txt","我想学习a","utf-8",(err)=>{
        if(err){
            throw err;
        }
    })
    //同步追加appendFileSync

5.文件读取

fs.read(fd, buffer, offset, length, position, callback); 读取文件 ,读取打开的文件内容到缓冲区中
fd, 使用fs.open打开成功后返回的文件描述符
buffer, 一个Buffer对象,v8引擎分配的一段内存
offset, 整数,向缓存区中写入时的初始位置,以字节为单位
length, 整数,读取文件的长度
position, 整数,读取文件初始位置;文件大小以字节为单位
callback(err, bytesRead, buffer), 读取执行完成后回调函数,bytesRead实际读取字节数,被读取的缓存区对象

let buffer=new Buffer(1024);
    fs.open("public/mongodb.txt","r+",(err,fd)=>{
        if(err){
            throw err;
        }
        fs.read(fd,buffer,0,buffer.length,buffer.length,(err,res)=>{
            if(err){
                throw err;
            }
            fs.appendFile("public/mode.txt",buffer.toString("utf-8"),(err)=>{
                if(err){
                    throw err;
                    console.log("写入失败");
                }
                console.log("写入成功")
            })
            console.log(buffer.toString("utf-8"));
        });
    });

6.关闭文件

fs.open("public/mongodb.txt","r+",(err,fd)=>{
        if(err){
            throw err;
        }
        console.log("文件已经打开");
        //文件关闭代码
        fs.close(fd,(error)=>{
            if(error){
                throw error;
            }
            console.log("文件关闭成功")
        });
    });

7.文件的截取

fs.ftruncate(fd, len, callback) 截取文件
fd - 通过 fs.open() 方法返回的文件描述符。
len - 文件内容截取的长度。
callback - 回调函数,没有参数。

let databuff=new Buffer(1024);
    fs.open("public/mongodb.txt","r+",(err,fd)=>{
        if(err){
            throw err;
        }
        //ftruncate 截取文件
        fs.ftruncate(fd,1024,(error)=>{
            if(error){
                throw error;
            }
            console.log("文件截取成功");
            fs.read(fd,databuff,0,databuff.length/2,0,(error,byte)=>{
                if(error){
                    throw error;
                }
                console.log(databuff.toString("utf-8"));
                //文件关闭
                fs.close(fd,(er)=>{
                    if(er){
                        throw er;
                    }
                })
            });
        });
    });
    //fs.ftruncateSync同步截取 

8.删除文件

fs.exists(path, callback); 判断文件或目录是否存在
path, 要查看目录/文件的完整路径及名;
[callback(exists)], 操作完成回调函数;exists true存在,false表示不存在

fs.unlink("public/stu.txt",(err)=>{
        if(err){
            throw err;
        }
        console.log("文件删除成功")
    })

9.创建目录+删除目录

fs.mkdir(path, [mode], callback)创建目录
path是需要创建的目录
[mode]是目录的权限(默认值是0777)
callback 是回调函数。

 let nickname="王五";
    fs.exists(`public/${nickname}`,(exis)=>{
        console.log(exis);
        if(!exis){
            fs.mkdir(`public/${nickname}`,{
                mode:0777
            },(err)=>{
                if(err){
                    throw err;
                }
                console.log("文件创建成功");
                //rmdir 删除目录
                fs.rmdir(`public/${nickname}`,(error)=>{
                     if(error){
                         throw error;
                     }
                     console.log("删除成功");
                 });
            });
        }
        else{
            console.log("该文件存在");
        }
        fs.appendFile(`public/${nickname}`+`/host.txt`,"我在尝试study",(err)=>{
            if(err){
                throw err;
            }
            console.log("写入成功");
        })
    }) 

10.读取目录(fs.readdir(path, callback))

//递归遍历目录里面的每一层
 let pathinfo="public";
    let method=(path)=>{
    fs.readdir(path,(err,files)=>{
        if(err){
            throw err;
        }
        //[ 'data.txt', 'maodou', 'mark', 'mode.txt', 'mongodb.txt', '王五' ]
        //console.log(files);
        files.map((value,index)=>{
            //console.log(value);
            fs.stat(path+`/${value}`,(error,stats)=>{
                if(error){
                    throw error;
                }
                //开始判断是否是目录还是文件夹
                if(stats.isFile()){
                    console.log(value+"是文件");
                }
                else if(stats.isDirectory()){
                    console.log(value+"是目录");
                    method(path+`/${value}`);
                }
            });
        });
    });
    }
    method(pathinfo);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值