Nodejs的fs模块

NodeJs的方法正常是异步,加上Sync就是同步,例如statSync

1.检测文件还是目录

let fs= require("fs");

//检测文件还是目录
fs.stat("http.js",(err,stas)=>{
    if (err) {  //如果没有这个目录或者文件,会报错
        console.log(err);
        return false;
    }
    console.log(stas.isDirectory());
    console.log(stas.isFile());
})

//第一个参数是path,后面是回调

2. 创建目录

//创建目录
fs.mkdir("upload",(err)=>{
    if (err) {  //如果目录已经存在会报错,提示目录已经存在
        console.log(err);
        return false;
    }
    console.log("创建成功")
})

//参数意义同上

3.写入文件

//写入文件
fs.writeFile("context.txt","这是写入的覆盖内容",function(err){
    if(err) return false;
    console.log("写入内容成功");
})

//如果不存在这个文件,会按照路径进行创建
//如果存在,内容会覆盖
//第一个参数path,第二个是data(内容), 第三个参数是一些文件的配置(这里省略了),最后一个是回调

4.追加写入文件

fs.appendFile("append.txt","追加内容1",(err)=>{
    if(err) return false;
    console.log("追加成功");
})
fs.appendFile("append.txt","追加内容2",(err)=>{
    if(err) return false;
    console.log("追加成功");
})

//追加内容,不会进行内容的覆盖
//文件存在就追加,不存在就新建文件,在追加

5.读取文件

//读取文件
fs.readFile("append.txt",(err,data)=>{
    if(err) return false;
    console.log(data);//<Buffer e8 bf bd e5 8a a0 e5 86 85 e5 ae b9 31 e8 bf bd e5 8a a0 e5 86 85 e5 ae b9 32 e8 bf bd e5 8a a0 e5 86 85 e5 ae b9 31>
    console.log(data.toString()) // 追加内容1追加内容2追加内容1
})

//上面是结果,默认data是个BUffer,二进制数据
//读取文件的数据,文件不存在会报错

6.读取目录

//读取目录
fs.readdir("upload",function(err,files){
    if(err){
        console.log(err);
        return false;
    }
    console.log(files)  //[ 'css', 'js', 'u.js' ]
})

//读取upload目录,files会包含目录和文件,只会读取当前层,更深层的要用递归
//当没有找到目录时候,会报错

7.删除目录

//删除目录
fs.rmdir("upload/js",(err)=>{
    if(err){
        console.log(err);
        return false;
    }
    console.log("删除成功");
})
//目录不存在会报错
//删除文件也会报错
//目录下面有文件也不能删除

8.删除文件

//删除文件
fs.unlink("upload/u.js",(err)=>{
    if(err){
        console.log(err);
        return false;
    }
    console.log("删除成功");
})

//文件不存在,或者删除目录都会报错

9.重命名

//重命名
fs.rename("uploadNew/css/style.css","uploadNew/css/new.css",(err)=>{
    if(err){
        console.log(err);
        return false;
    }
    console.log("命名成功");
})

//旧的path,新的path
//可以重新命名文件,也可以是目录
//如果不在同一目录下,就会进行剪贴和命名
//找不到目录或者文件会报错
//旧path是目录,新path是文件也会报错

fs.rename("uploadNew/css/new.css","uploadNew/style.css",(err)=>{
    if(err){
        console.log(err);
        return false;
    }
    console.log("命名成功");
})
//上面是把new.css剪切到uploadNew下面,并命名为style

10.demo----判断upload目录是否存在,不存在就创建个

fs.stat("upload",(err,stats)=>{
    if(err){
        console.log(err);
        fs.mkdir("upload",(error)=>{
            if(error) return false;
            console.log("新建upload成功");
        })
        return false;
    }
    if(stats.isDirectory()){
        console.log("目录已经存在")
    }
})

11.demo----找出html下的所有目录,然后打印出来

fs.readdir("html",(err,files)=>{
    if(err) return false;
    let dir=[];
    files && files.length>0 && files.forEach((file)=>{
        let stat=fs.statSync(`html/${file}`);
        if(stat.isDirectory()){
            dir.push(file);
        }
    })
    console.log(dir);
})

12.createReadStream  读取数据流  一般用于大数据读取

let str="";
let fileReadStream=fs.createReadStream("append.txt");

//读取数据
fileReadStream.on("data",(dt)=>{
    str+=dt;
    console.log(dt)
})

//读取完毕
fileReadStream.on("end",(dt)=>{
    console.log("读取结束");
    console.log(str)
})

//读取报错
fileReadStream.on("error",(err)=>{
    console.log(err)
})

13.createWriteStream   写入数据流 ,直接覆盖,不是追加

let fileWriteStream= fs.createWriteStream("append.txt");
for(let i=0;i<100;i++){
    fileWriteStream.write("增加一段数据\n");
}
fileWriteStream.end();
fileWriteStream.on("finish",()=>{
    console.log("写入成功");
})
fileWriteStream.on("error",()=>{
    console.log("写入失败");
})

14.管道  从一个文件读取,写入另一个文件

let fileReadStream=fs.createReadStream("append.txt");
let fileWriteStream=fs.createWriteStream("context.txt");
fileReadStream.pipe(fileWriteStream);

//从append获取数据,写入到context

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值