<center>nodeJS-fs模块基本</center>

异步和同步

Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。

异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。

建议大家使用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞。

常见的文件的基本操作:

前提: 要先引入fs模块
      var fs = require('fs');

01) 读取文件(内容)

 a) 异步读取
        fs.readFile('要读取的文件的路径', function (err, data) {
            // 判断 如果有错 打印错误
            if (err) {
                console.log('读取错误!')
            }
            // 否则 打印读取到的数据
            console.log(data);
        })

    b) 同步读取
        // 直接读取 返回读取的结果 保存在data变量里面
        var data = fs.readFileSync('被读取的文件的路径');

// 引入fs模块

var fs = require('fs');

  // 异步读取
  /*
      fs.readFile('./readme.txt', function (err, data) {
            // 判断 如果有错 抛出错误
          if (err) {
              throw err;
          } 
          // 如果没有错 打印读取到的文件数据
          console.log('读取结果:', data.toString());
      })
  */ 

  // console.log('看一下阻塞不?')

  // 同步读取 (直接返回读取的结果 保存在变量data里面)
  var data = fs.readFileSync('./readme.txt');
  console.log('读取结果:', data.toString());
  console.log('看一下阻塞不?')

02)异步读取文件信息

// 引入fs模块
  var fs = require('fs');


  /*
      // 异步读取文件信息
      fs.stat('./', function (err, stats) {
        // 如果有错 抛出错误
          if (err) {
              throw err;
          }
          // 否则 打印读取的文件信息
          // console.log(stats);
          console.log('文件的大小:', stats.size);
          console.log('是否是文件:', stats.isFile());
          console.log('是否是目录(文件夹):', stats.isDirectory());
      })

  */ 

  // 同步读取 直接返回读取结果 保存在data里面
  var data = fs.statSync('./readme.txt');
  console.log(data);

03-fs写文件

// 引入fs模块
    var fs = require('fs');

    // 往writeme.txt文件 写入一些内容
    fs.writeFile('./writeme.txt', '我是写入的内容', function (err) {
        // 判断 如果有错 抛出错误 否则 打印写入成功
        if (err) {
            throw err;
        } 
        console.log('写入文件成功!')
    })

04-先读取再写入

// 先引入fs模块
var fs = require('fs');

// 先读取文件
fs.readFile('./readme.txt', function (err, data) {
    // 判断 如果有错 抛出错误 否则 把读取的结果保存在一个变量里面
    if (err) {
        throw err;
    }
    // 定义一个变量 保存读取结果
    var readRst = data;

    // 把读取的结果 写入writeme.txt文件里面
    fs.writeFile('./writeme.txt', readRst, function (err) {
        // 如果有错 抛出错误
        if (err) {
            throw err;
        }
        console.log('写入成功!')
    })
})

05-删除文件

// 引入fs模块
var fs = require('fs');

// 删除文件
fs.unlink('./writeme.txt', function (err) {
    // 判断 如果有错 抛出错误 否则 打印删除成功
    if (err) {
        throw err;
    } 

    console.log('删除成功!')

})

06-读取文件目录中的所有文件

 // 引入fs模块
var fs = require('fs');

// 读取文件目录(文件夹)中的所有文件
fs.readdir('../', function (err, files) {
    // 如果有错 抛出错误
    if (err) {
        throw err;
    }
    // 否则 打印读取的结果 (读取当前目录的结果 会被放入一个数组里面)
    console.log(files);
})

07-创建文件夹&删除空文件夹

// 引入fs模块
var fs = require('fs');
/*
    // 创建文件夹
    fs.mkdir('./cc', function (err) {
        // 如果有错 抛出错误
        if (err) {
            throw err;
        }
        // 否则 打印创建文件夹成功
        console.log('创建文件夹成功')
    })
*/ 
// 删除空的文件夹
fs.rmdir('./cc', function (err) {
    if (err) {
        throw err;
    } else {
        console.log('删除空文件夹成功')
    }
})

08-递归删除非空文件夹

// 引入fs模块
var fs = require('fs');
// 封装成一个 可以删除非空目录的函数(传入要删除的目录即可)
function delDir (dir) {
    // 获取传入的目录下所有的文件 结果是一个数组
    var filesArr = fs.readdirSync(dir);
    // 循环遍历这个数组 ['bb', 'cc', 'text.txt']
    for (var i in filesArr) {
        // 拼接读取文件信息的路径
        var path = dir + '/' +filesArr[i] // ./aa/bb  ./aa/cc ./aa/text.txt
        // 读取文件的信息 
        var stat = fs.statSync(path);
        // 判断 如果是文件 直接删除
        if (stat.isFile()) {
            fs.unlinkSync(path)  // 直接删除
        } else if (stat.isDirectory()) {
            // 递归调用自己
            delDir(path)  
        }
    }
    // 删除空目录(文件夹)
    fs.rmdirSync(dir)
}
// 想如何调用?
// delDir('D:\\day02');
// 暴露出去
// module.exports = delDir;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,同样地,该代码也不符合 JSON 格式。建议您使用 HTML 解析器将其解析成一个 DOM 对象,然后再使用相关的方法将其转换为 JSON 格式。以下是一个示例代码,使用了 Node.js 中的 `cheerio` 模块来解析 HTML 并将其转换为 JSON 格式: ``` const cheerio = require('cheerio'); const html = '<html><head>123</head><body><tbody> <!-- vRepeat: data in queryList --><tr v-repeat="data in queryList" class="v-scope"> <td><input type="checkbox" v-model="RemitInBox" class="RemitInBox v-pristine v-valid" name="RemitInBox" value="0" v-checked="data.CheckFlag" v-disabled="data.FndDrc!=\'01\' || data.BusiState!=\'10\'" id="List0_RemitIn" v-click="clickBox($index,data)"></td> <td><span v-show="data.FndDrc!=\'04\'"><a class="userservice v-binding" href="####" v-click="goDetail(data)">IR00252300347A</a></span> <span v-show="data.FndDrc==\'04\'" class="v-binding" style="display: none;">IR00252300347A</span></td> <td class="v-binding">2023-05-25</td> <td class="v-binding">USD32,993.50</td> <td class="v-binding">1/FLOKSER KIMYA SANAYI VE TICARET 1...</td> <td class="v-binding">31980005000107125</td> <td><span v-show="data.FndDrc==\'01\'">入账</span> <span v-show="data.FndDrc==\'04\'" style="display: none;">退汇</span> <span v-show="!(data.FndDrc==\'04\'||data.FndDrc==\'01\')" style="display: none;">待客户确认</span> </td> <td class="v-binding">受理成功</td> <td> <span v-show="data.FndDrc==\'01\' && data.BusiState==\'10\'"> <a href="#" v-click="remitInPrint(data.BsnSrlNo)" class="userservice"> 打印 </a> </span> </td> </tr> </tbody> </body></html>'; const $ = cheerio.load(html); const tbody = $('tbody'); const result = []; tbody.find('tr').each((i, tr) => { const data = {}; $(tr).find('[v-repeat], [v-model]').each((j, el) => { const name = $(el).attr('v-repeat') || $(el).attr('v-model'); const value = $(el).attr('v-bind:value') || $(el).val() || $(el).text(); data[name] = value; }); result.push(data); }); console.log(result); ``` 该代码会输出一个包含了表格数据的 JSON 数组。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值