当前位置: 首页 > 后端技术 > Node.js

nodejs文件夹深拷贝

时间:2023-04-03 13:48:10 Node.js

前段时间接到领导的要求,运营方时不时会给我一些.html文件,让我把里面的一些东西解析出来插入到数据库中。本来就是解析dom元素然后插入,但是操作给我的文件是多级的,有点麻烦:比如下面的:我需要的是复制其中的每个文件将操作给出的文件夹放到某个文件夹(test)中,然后取test中的所有文件进行分析。一开始,我有吃苦耐劳的精神。每次都是复制粘贴,但是很容易出错。关键是我们是程序员,所以要用程序员的方式去解决。有的同志会说,这很简单。找到'E:819Data819'这个文件夹,读出里面的每个文件夹组成一个数组,通过fs循环复制每个文件。readdir('E:/819data/819','utf-8',(err,fileList)=>{fileList.forEach((file,index)=>{leturl=from+file+'/'fs.readdir(from+file,'utf-8',(error,singleFile)=>{singleFile.forEach((fileInner,i)=>{fs.writeFileSync(`${to}${name++}.html`,fs.readFileSync(url+fileInner));})})})})这是上面代码的实现。一开始我也是为了省事写的(把操作同事给的文件夹里的文件全部复制到我的测试目录下。),但是mmp后来发现有些文件会嵌套多个文件夹。这个时候是不能一层层判断的。遇到操作给的10层嵌套,不可能复制每个文件夹写一串代码,这里只能用递归来解析。让name=1copyItDigui('E:/819data/819','E:/test/');functioncopyItDigui(from,to){searchFile(from,to);}functionsearchFile(from,to){letstat=fs.lstatSync(from);if(stat.isDirectory()){//如果是文件夹,继续下面的遍历,否则直接复制并重命名文件fs.readdir(from,'utf-8',(err,fileList)=>{fileList.forEach((file,index)=>{searchFile(from+"/"+file,to)})})}else{fs.writeFileSync(`${to}${name++}.html`,fs.readFileSync(from));//这里是执行文件的拷贝,下面是大文件的拷贝//fs.writeFileSync(to,fs.readFileSync(from));//fs。createReadStream(src).pipe(fs.createWriteStream(dst));Largefilecopy}}这里没有用ts写,可能看起来有点乱,但是里面有写注释,相信大家看得懂聪明的。一旦代码被执行,复制就完成了,你就大功告成了。完全按照预期的结果,现在我们发现,即使我们是前端程序员,懂得点nodejs,还是蛮有用的,可以提升我们的成就感