zoukankan      html  css  js  c++  java
  • nodejs中fs文件模块使用demo

    /**
     * fs.stat  检测是文件还是目录
     * fs.mkdir  创建目录
     * fs.writeFile 创建写入文件
     * fs.appendFile 追加文件
     * fs.readFile 读取文件
     * fs.readdir 读取目录
     * fs.rename 重命名
     * fs.rmdir 删除目录
     * fs.unlink 删除文件
     */
    
    const fs = require('fs');
    // 1、fs.stat  检测是文件还是目录
    
     fs.stat('./html',(err,data) => {
        if(err){
            console.log(err);
        }
        console.log(`是文件:${data.isFile()}`);
        console.log(`是目录:${data.isDirectory()}`);
    })
    
    
    
    // 2、fs.mkdir 创建目录
    /**
     * path       将创建的目录路径
     * mode       目录权限(读写权限) 默认777
     * callback   回调,传递异常参数
     */
    
    fs.mkdir("./css",err => {//在上传文件时  执行这一段,没有这个目录的话就创建,如果有,就会报错
        if(err){
            console.log(err);
            return;
        }
        console.log("创建成功");
    })
    
    //3、fs.writeFile 创建写入文件
    /**
     * filename  (String)   
     * data      (String|Buffer)
     *options    (Object)          option数组对象包含:
        .encoding  (String)        可选值  默认'utf8'  当data使用buffer时,该值应该为
        .mode    (Number)          文件读写权限,默认值 438
        .flag    (String)          默认值'w'
        .callback{Function}        回调,传递一个异常参数err
     */ 
    
     fs.writeFile("./html/index.html","你好nodejs",err => {//在html目录创建并写入index.html 写入内容是 你好nodejs  如果文件已经存在则替换此文件
        if(err){
            console.log(err);
            return;
        }
        console.log("创建文件写入成功");
    })
    
    //4、fs.appendFile 追加文件
    
     fs.appendFile("./css/base.css","body{color:red}
    ",err => {//在文件内追加内容,而不是替换,如果没有此文件也会创建文件
        if(err){
            console.log(err);
            return;
        }
        console.log("appendFile成功");
    })
    
    
    // 5、fs.readFile 读取文件
    
     fs.readFile("./html/index.html",(err,data) => {//读取html目录下的index.html文件  读取到的data格式为 buffer类型
        if(err){
            console.log(err);
            return;
        }
        console.log(data);
        console.log(data.toString());//buffer类型转换为字符串
    })
    
    
    // 6、fs.readdir 读取目录
    
     fs.readdir("./html",(err,data) => {// 读取目录里的文件  目录页可以读取出来
        if(err){
            console.log(err);
            return;
        }
        console.log(data);
    })
    
    // 7、fs.rename 重命名   功能  1、重命名  2、移动文件
    
     fs.rename("./css/aaa.css","./html/cc.css",err => {//将css目录下的aaa.css文件改名为cc.css  如果路径不一样就相当于移动并改名
        if(err){
            console.log(err);
            return;
        }
        console.log("重命名成功");
    })
    
    // 8、fs.rmdir 删除目录
    fs.rmdir("./html/aaa",err => {//如果目录中有文件则不能删除 会报错
        if(err){
            console.log(err);
            return;
        }
        console.log("删除目录成功");
    })
    // 9、fs.unlink 删除文件
    fs.unlink("./html/aaa/index.html",err => {
        if(err){
            console.log(err);
            return;
        }
        console.log("删除文件成功");
    })

     两道小题:

    1.判断服务器上有没有upload目录,如果没有创建这个目录,如果有的话不做操作。(图片上传)
    const fs = require('fs')
    // 1.判断服务器上有没有upload目录,如果没有创建这个目录,如果有的话不做操作。(图片上传)
    let path = "./upload"
    fs.stat(path,(err,data) => {
        if(err){
            mkdir(path)
            return;
        }
        if(data.isDirectory()){
            console.log("已有upload目录");
        }else{
            // 如果存在upload文件,需要先删除upload文件,再创建upload目录,
            fs.unlink(path,err => {
                if(!err){
                    mkdir(path)
                }else{
                    console.log("创建失败");
                }
            })
        }
    })
    // 创建目录
    function mkdir(dir){
        fs.mkdir(dir,err => {
            console.log(err);
            if(!err){
                console.log("创建成功");
            }else{
                console.log("创建失败");
            }
            return;
        })
    }
    2.wwwroot文件夹下面images css js 以及index.html,找出wwwroot目录下面的所有目录,然后把它放在一个数组中。
    1、递归实现
    let path2 = "./wwwroot",dirArr = [];
    // 1、递归实现
    fs.readdir(path2,(err,data) =>{
        if(err){
            console.log(err);
            return;
        }
        console.log(data);
        (function getDir(i){
            console.log(i,"i");
            if(i == data.length) {
                console.log(dirArr,"dirArr");
                return;
            }
            fs.stat(path2+"/"+data[i],(error,stats) => {
                if(!error){
                    if(stats.isDirectory()){
                        dirArr.push(data[i])
                    }
                    getDir(i+1);
                }
            })
        })(0);//自执行函数
    })

    2、async await 实现

    // 1、 定义一个isDir方法判断一个资源是目录还是文件
    async function isDir(path){
        return new Promise((resolve,reject) => {
            fs.stat(path,(error,stats) => {
                if(error){
                    console.log(error);
                    reject(error)
                    return;
                }
                if(stats.isDirectory()){
                    resolve(true)
                }else{
                    resolve(false)
                }
            })
        })
    }
    // 2、获取wwwroot里的所有资源 循环遍历
    function main(){
        let path = "./wwwroot"
        fs.readdir(path2,async (err,data) =>{
            if(err){
                console.log(err);
                return;
            }
            for(let i = 0; i < data.length; i++){
                if(await isDir(path + '/' + data[i])){
                    dirArr.push(data[i])
                }
            }
            console.log(dirArr);
        })
    }
    
    main();

     fs模块 读取流、写入流、管道流

    读取流:

    const fs = require('fs');
    
    var readStream = fs.createReadStream("./data/input.text");
    
    var count = 0;
    var str = "";
    
    readStream.on('data',(data)=>{
      str += data;
      count++;
    })
    
    readStream.on('end',(data)=>{
      console.log(str,"str");
      console.log(count,"count");
    })
    
    readStream.on('error',(err)=>{
      console.log(err,"err");
    })

    写入流:

    const fs = require('fs');
    var str = '';
    
    for(let i = 0;i<500;i++){
      str += "我是从数据库获取的数据,我要保存起来
    ";
    }
    
    var writeStream = fs.createWriteStream("./data/output.text");//会自动生成文件
    
    writeStream.write(str);
    
    // 标记写入完成   标记写入完成,才能监听写入完成事件(如果标记,则不会触发finish事件)
    writeStream.end();
    
    // 监听写入完成事件
    writeStream.on('finish',()=>{
      console.log("写入完成");
    })

    管道流:

    // 管道流
    const fs = require('fs');
    var readStream = fs.createReadStream("./data/img/a.jpg");
    var writeStream = fs.createWriteStream("./data/b.jpg");
    
    readStream.pipe(writeStream);
     

  • 相关阅读:
    Java跨语言调用,使用JNA访问Java外部接口
    Docker下搭建Jenkins构建环境
    Elasticsearch方案选型必须了解的10件事!
    Elasticsearch Top10 监控指标
    Elasticsearch删除操作详解
    Elasticsearch索引生命周期管理探索
    论Elasticsearch数据建模的重要性
    Elasticsearch的ETL利器——Ingest节点
    Elasticsearch基础但非常有用的功能之二:模板
    Elasticsearch基础但非常有用的功能之一:别名
  • 原文地址:https://www.cnblogs.com/fqh123/p/15028126.html
Copyright © 2011-2022 走看看