1、文件的读取

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

代码如下

 //此函苏是对目录进行读取的

 //我们想要生成的是一个根据目录所创建的json数据

 const fs = require("fs");
const path = require("path"); function read(rootPath, name) {
let opj = {};
//首先rootPath是我们想要创建的根目录路径 name是对象中的name属性 opj是我们想要生成的对象 //第一步 我们要先判断下这个文件夹是不是存在
if (!fs.existsSync(rootPath)) return;
//第二步我们要判断这个路径是文件还是文件夹
if (fs.statSync(rootPath).isFile()) {
//如果是个文件的话 他的children属性就是这个文件内容
opj.name = name;
opj.type = "file";
opj.children = fs.readFileSync(rootPath, "utf8");
} else if (fs.statSync(rootPath).isDirectory()) {
//如果是个文件夹的话他的children属性有两种情况
//空文件夹下不存在 不是空文件是个数组 数组继续放这些对象 //首先判断文件夹内容
let child = fs.readdirSync(rootPath);
if (child.length) {
//非空文件夹情况
opj.name=name;
opj.type="dir";
opj.children = child.map(item => {//这里使用map是因为map返回数组这个特性
let newPath=path.join(rootPath,item);//关键 利用这个方法合并路径
console.log(newPath)
return read(newPath,item)
})
}else{
//空文件的情况
opj.name=name;
opj.type="dir";
}
}
return opj;
} let data=read(path.join("./试验品文件"), "./试验品文件");
//大文件写入
let ws=fs.createWriteStream("./data.json")
ws.write(JSON.stringify(data))

2、创建文件夹目录

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

 const fs = require("fs");
const path = require("path");
const data = require("./data.js"); function create(data) {
//先根据数据创造出最外层文件夹
//首先判断这个文件夹存在不存在 不存在创建 存在不创建
let rootPath = data.name;
//console.log(fs.existsSync(rootPath))
if (fs.existsSync(rootPath))return;
//不存在的情况 先创建
//创建之前判断我们是想创建文件还是文件夹
//console.log(data,"----")
if (data.type=="dir") {
//文件夹的情况
fs.mkdirSync(rootPath);
//创建完了最外层目录后 对数据的children属性进行循坏
data.children&&data.children.forEach(item => {
//循坏能得到每一个对象 然后递归在执行
//递归之前有个问题是路径问题 我们需要更改下name的名字
item.name=path.join(rootPath,item.name);
//console.log(item,"------------------------------------")
create(item)
})
}else if(data.type=="file"){
//文件的情况
fs.writeFileSync(rootPath,data.children);
} }
create(data.data)

3、文件夹的拷贝

 const fs = require("fs");
const path = require("path") function copy(dir, newDir) {
//首先判断要拷贝的文件是不是存在
if (!fs.existsSync(dir)) return;
if (!fs.existsSync(newDir)) {
//如果这个需要copy的文件不存在就创建他
fs.mkdirSync(newDir);
//创建出这个文件夹后再循坏那个需要被拷贝的文件夹下面的东西
let child = fs.readdirSync(dir);
child.length && child.forEach(item => {
let dirs = path.join(dir, item);
let newDirs = path.join(newDir, item);
if (fs.statSync(dirs).isDirectory()) {
console.log(dirs, newDirs)
copy(dirs, newDirs)
} else {
if (fs.statSync(dirs).size * 1 < 10485760) {
//如果小于10MB证明是小文件
console.log("小");
//读取小文件
let content = fs.readFileSync(dirs, "utf8");
fs.writeFileSync(newDirs, content) } else {
//大于的话证明是大文件
let rs=fs.createReadStream(dirs);
let ws=fs.createWriteStream(newDirs);
console.log(dirs,"大大大大大大大")
rs.pipe(ws)
} } })
}
} copy(path.join("./试验品文件"), path.join("./试验品文件副本"))

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

  1. 利用ES6中的Proxy和Reflect 实现简单的双向数据绑定

    利用ES6中的Proxy (代理) 和 Reflect 实现一个简单的双向数据绑定demo. 好像vue3也把 obj.defineProperty()  换成了Proxy+Reflect. 话不多说 ...

  2. 简单剖析Node中的事件监听机制(一)

    使用js的class类简单的实现一个事件监听机制,不同于浏览器中的时间绑定与监听,类似于node中的时间监听,并且会在接下来的文章中去根据自己的理解去写一下Event模块中的原理. Node.js使用 ...

  3. 如何从一张图片中裁剪一部分距形图片另存为文件(使用Canvas.CopyRect)

    如何从一张图片中裁剪一部分距形图片另存为文件? Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiMultimedia/html/delp ...

  4. node中fs内置模块

    Node.js内置的fs模块就是文件系统模块,负责读写文件. 和所有其它JavaScript模块不同的是,fs模块同时提供了异步和同步的方法. 回顾一下什么是异步方法.因为JavaScript的单线程 ...

  5. node.js中常用的fs文件系统

    fs文件系统模块对于系统文件及目录进行一些读写操作. 模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync(). 异步的 ...

  6. node中的stream(流)内置模块

    stream是Node.js提供的又一个仅在服务区端可用的模块,目的是支持“流”这种数据结构. 什么是流?流是一种抽象的数据结构.想象水流,当在水管中流动时,就可以从某个地方(例如自来水厂)源源不断地 ...

  7. node中fs模块 - fs.open() fs.read() fs.write() fs.close()

    var fs = require('fs') fs.open('./a.txt', 'a+', function(err, fd) { // 打开文件后 创建缓冲区放置数据 ), // 读取多少字节 ...

  8. 说说对 Node 中的 fs 模块的理解? 有哪些常用方法?

    一.是什么 fs(file system),该模块提供本地文件的读写能力,基本上是POSIX文件操作命令的简单包装 可以说,所有与文件的操作都是通过fs核心模块实现 导入模块如下: const fs  ...

  9. 利用node构建本地服务

    利用node构建本地服务 首先安装下node.js,地址为https://nodejs.org/en/,然后安装npm. node.js的中文api地址http://nodeapi.ucdok.com ...

随机推荐

  1. 用squid做http/https正向代理

    0.环境准备 VM1(server):nat-192.168.12.128 bridge-192.168.124.128 VM2(client):bridge-192.168.124.129 在VMw ...

  2. 打通版微社区(1):PHP环境部署 for DZX3.2

    写在前面:本文参考了http://blog.sina.com.cn/s/blog_513be2630101linz.html非常感谢博主此文对我此次操作帮助很大.PHP的windows部署方案主要分为 ...

  3. 【Leetcode】【Hard】Copy List with Random Pointer

    A linked list is given such that each node contains an additional random pointer which could point t ...

  4. SVN图标不显示的解决几种方式

    系统安装的Tortoise SVN,不知道是不是安装了其他软件的缘故,造成SVN客户端功能可以正常使用,就是文件夹或文件的左下角不显示图标.故上网查找解决方法: 方法一: 升级到最新版本,基本是没用的 ...

  5. C对64位整数类型的支持

    在使用C语言过程中可能需要接触长整数类型,其中包括固定长度数据类型的声明.输入输出函数的标志符等细节,在此记录. int64_t 与 uint64_t C的标准只规定特定数据类型需要实现的最小长度,特 ...

  6. jquery实现的时间轴

    代码 样式文件style.css 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ...

  7. JavaScript的事件对象中的特殊属性和方法(鼠标,键盘)

    鼠标操作导致的事件对象中的特殊属性和方法 鼠标事件是 Web 上面最常用的一类事件,毕竟鼠标还是最主要的定位设备.那么通过事件对象可以获取到鼠标按钮信息和屏幕坐标获取等 鼠标按钮 只有在主鼠标按钮被单 ...

  8. fastjson反序列化TemplatesImpl

    环境参考第一个链接,直接用IDEA打开 编译EvilObject.java成EvilObject.class 先看poc,其中NASTY_CLASS为TemplatesImpl类,evilCode是E ...

  9. 2019.3.5 控制台输出log4j得有些报错信息

    报错内容如下 log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.Sp ...

  10. Extjs自定义验证介绍

    表单验证实例(空验证,密码确认验证,email验证) 我们可以用单独的js写表单验证,但是extjs已经为我们想到了(自己单独写反而不方便). 在验证之前,我不得不提两个小知识点: //大家在很多的e ...