• 利用node中的内置模块fs实现对简单文件的读取 拷贝 创建等功能


    1、文件的读取

    我们想要根据如下一种目录生成一种json数据

    代码如下

     1 //此函苏是对目录进行读取的
     2 
     3 //我们想要生成的是一个根据目录所创建的json数据
     4 
     5 const fs = require("fs");
     6 const path = require("path");
     7 
     8 function read(rootPath, name) {
     9     let opj = {};
    10     //首先rootPath是我们想要创建的根目录路径 name是对象中的name属性 opj是我们想要生成的对象
    11 
    12     //第一步 我们要先判断下这个文件夹是不是存在
    13     if (!fs.existsSync(rootPath)) return;
    14     //第二步我们要判断这个路径是文件还是文件夹
    15     if (fs.statSync(rootPath).isFile()) {
    16         //如果是个文件的话 他的children属性就是这个文件内容
    17         opj.name = name;
    18         opj.type = "file";
    19         opj.children = fs.readFileSync(rootPath, "utf8");
    20     } else if (fs.statSync(rootPath).isDirectory()) {
    21         //如果是个文件夹的话他的children属性有两种情况 
    22         //空文件夹下不存在 不是空文件是个数组 数组继续放这些对象
    23 
    24         //首先判断文件夹内容
    25         let child = fs.readdirSync(rootPath);
    26         if (child.length) {
    27             //非空文件夹情况
    28             opj.name=name;
    29             opj.type="dir";
    30             opj.children = child.map(item => {//这里使用map是因为map返回数组这个特性
    31                 let newPath=path.join(rootPath,item);//关键 利用这个方法合并路径
    32                 console.log(newPath)
    33                 return read(newPath,item)
    34             })
    35         }else{
    36             //空文件的情况
    37             opj.name=name;
    38             opj.type="dir";
    39         }
    40     }
    41     return opj;
    42 }
    43 
    44 let data=read(path.join("./试验品文件"), "./试验品文件");
    45 //大文件写入
    46 let ws=fs.createWriteStream("./data.json")
    47 ws.write(JSON.stringify(data))

    2、创建文件夹目录

    根据上面生成的data数据 在创建出上述的文件目录  代码如下

     1 const fs = require("fs");
     2 const path = require("path");
     3 const data = require("./data.js");
     4 
     5 function create(data) {
     6     //先根据数据创造出最外层文件夹
     7     //首先判断这个文件夹存在不存在 不存在创建 存在不创建
     8     let rootPath = data.name;
     9     //console.log(fs.existsSync(rootPath))
    10     if (fs.existsSync(rootPath))return;
    11     //不存在的情况 先创建
    12     //创建之前判断我们是想创建文件还是文件夹
    13     //console.log(data,"----")
    14     if (data.type=="dir") {
    15         //文件夹的情况
    16         fs.mkdirSync(rootPath);
    17         //创建完了最外层目录后 对数据的children属性进行循坏
    18         data.children&&data.children.forEach(item => {
    19             //循坏能得到每一个对象 然后递归在执行
    20             //递归之前有个问题是路径问题 我们需要更改下name的名字
    21             item.name=path.join(rootPath,item.name);
    22             //console.log(item,"------------------------------------")
    23             create(item)
    24         })
    25     }else if(data.type=="file"){
    26         //文件的情况
    27         fs.writeFileSync(rootPath,data.children);
    28     }
    29 
    30 }
    31 create(data.data)

     3、文件夹的拷贝

     1 const fs = require("fs");
     2 const path = require("path")
     3 
     4 function copy(dir, newDir) {
     5     //首先判断要拷贝的文件是不是存在
     6     if (!fs.existsSync(dir)) return;
     7     if (!fs.existsSync(newDir)) {
     8         //如果这个需要copy的文件不存在就创建他
     9         fs.mkdirSync(newDir);
    10         //创建出这个文件夹后再循坏那个需要被拷贝的文件夹下面的东西
    11         let child = fs.readdirSync(dir);
    12         child.length && child.forEach(item => {
    13             let dirs = path.join(dir, item);
    14             let newDirs = path.join(newDir, item);
    15             if (fs.statSync(dirs).isDirectory()) {
    16                 console.log(dirs, newDirs)
    17                 copy(dirs, newDirs)
    18             } else {
    19                 if (fs.statSync(dirs).size * 1 < 10485760) {
    20                     //如果小于10MB证明是小文件
    21                     console.log("小");
    22                     //读取小文件
    23                     let content = fs.readFileSync(dirs, "utf8");
    24                     fs.writeFileSync(newDirs, content)
    25 
    26                 } else {
    27                     //大于的话证明是大文件
    28                     let rs=fs.createReadStream(dirs);
    29                     let ws=fs.createWriteStream(newDirs);
    30                     console.log(dirs,"大大大大大大大")
    31                     rs.pipe(ws)
    32                 }
    33 
    34             }
    35 
    36         })
    37     }
    38 }
    39 
    40 copy(path.join("./试验品文件"), path.join("./试验品文件副本"))
    一条不甘于平凡的咸鱼分享
  • 相关阅读:
    IIS打开本地站点时,无法访问本地json文件的解决办法
    几种流行的前端框架(BootStrap、Layui、Element-UI、Mint UI、Angular、Vue.js、React)
    六大排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序
    SpringBoot框架开发的优秀的项目「值得收藏学习」
    jmeter接口之json提取器应用
    【设计模式(23)】行为型模式之访问者模式
    【设计模式(22)】行为型模式之模板模式
    【设计模式(21)】行为型模式之策略模式
    HTML回忆笔记,给那些忘了但又没完全忘的人准备的
    vscode创建html文件使用"!+tab"不起作用的解决方法
  • 原文地址:https://www.cnblogs.com/cq1715584439/p/10734033.html
Copyright © 2020-2023  润新知