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("./试验品文件副本"))