利用node中的内置模块fs实现对简单文件的读取 拷贝 创建等功能
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实现对简单文件的读取 拷贝 创建等功能的更多相关文章
- 利用ES6中的Proxy和Reflect 实现简单的双向数据绑定
利用ES6中的Proxy (代理) 和 Reflect 实现一个简单的双向数据绑定demo. 好像vue3也把 obj.defineProperty() 换成了Proxy+Reflect. 话不多说 ...
- 简单剖析Node中的事件监听机制(一)
使用js的class类简单的实现一个事件监听机制,不同于浏览器中的时间绑定与监听,类似于node中的时间监听,并且会在接下来的文章中去根据自己的理解去写一下Event模块中的原理. Node.js使用 ...
- 如何从一张图片中裁剪一部分距形图片另存为文件(使用Canvas.CopyRect)
如何从一张图片中裁剪一部分距形图片另存为文件? Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiMultimedia/html/delp ...
- node中fs内置模块
Node.js内置的fs模块就是文件系统模块,负责读写文件. 和所有其它JavaScript模块不同的是,fs模块同时提供了异步和同步的方法. 回顾一下什么是异步方法.因为JavaScript的单线程 ...
- node.js中常用的fs文件系统
fs文件系统模块对于系统文件及目录进行一些读写操作. 模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync(). 异步的 ...
- node中的stream(流)内置模块
stream是Node.js提供的又一个仅在服务区端可用的模块,目的是支持“流”这种数据结构. 什么是流?流是一种抽象的数据结构.想象水流,当在水管中流动时,就可以从某个地方(例如自来水厂)源源不断地 ...
- node中fs模块 - fs.open() fs.read() fs.write() fs.close()
var fs = require('fs') fs.open('./a.txt', 'a+', function(err, fd) { // 打开文件后 创建缓冲区放置数据 ), // 读取多少字节 ...
- 说说对 Node 中的 fs 模块的理解? 有哪些常用方法?
一.是什么 fs(file system),该模块提供本地文件的读写能力,基本上是POSIX文件操作命令的简单包装 可以说,所有与文件的操作都是通过fs核心模块实现 导入模块如下: const fs ...
- 利用node构建本地服务
利用node构建本地服务 首先安装下node.js,地址为https://nodejs.org/en/,然后安装npm. node.js的中文api地址http://nodeapi.ucdok.com ...
随机推荐
- Android自定义View之绘制虚线
现在实现一个效果,有个虚线分割和阴影效果.一个一个实现. 分为2中方式. 1.设计出图,我们SRC引入进来(最简单,但是需要其他资源支持). 2.code实现,有些难度,需要查资料. 现在把第2种方式 ...
- INFORMATICA 开发规范
目 录 Informatica开发规范.... 1 目 录.... 2 1 编写目的.... 4 2 ETL研发责任人界定.... 4 3 ETL ...
- C# 五大修饰符
修饰符 访问权限 public 关键字是类型和类型成员的访问修饰符. 公共访问是允许的最高访问级别. 对访问公共成员没有限制 private 私有访问是允许的最低访问级别. 私有成员只有在声明它们的类 ...
- iOS设计模式 - 外观
iOS设计模式 - 外观 原理图 说明 1. 当客服端需要使用一个复杂的子系统(子系统之间关系错综复杂),但又不想和他们扯上关系时,我们需要单独的写出一个类来与子系统交互,隔离客户端与子系统之间的联系 ...
- SQL insert语句中插入带有特殊符号
1.插入数据库字符串中海油单引号,需要转义处理,例如插入“I‘m OK!” SQL语句: INSERT INTO tableTest(FileTXT) VALUES('I''m OK!') 2.如果S ...
- Python学习---PyCharm的使用学习
1.1. IDEA的使用 PyCharm2017下载 链接:https://pan.baidu.com/s/1HPR9FtVV5BCvd3uTdOetxw 密码:ok0q 激活IDEA2017(方案一 ...
- Visual Studio 2017 连接Oracle
VS 2017 连接 Oracle 12 因为Visual Studio自带的数据文件已经不能支持超过10g以上的了,所以需要另外 下载插件 本机环境 宿主机的环境:win7,Visual Studi ...
- Asp.net core 项目实战 新闻网站+后台 源码、设计原理 、视频教程
首先说明,视频教程.源码并非本人原创 本人将项目分割开,并写了一些说明. 该视频教程 地址 https://study.163.com/course/courseMain.htm?courseId= ...
- TCP/IP 协议图--网络层中的 IP 协议
IP(IPv4.IPv6)相当于 OSI 参考模型中的第3层——网络层.网络层的主要作用是“实现终端节点之间的通信”.这种终端节点之间的通信也叫“点对点通信”. 网络的下一层——数据链路层的主要作用是 ...
- Redis 拒绝连接
1.本地防火墙是否关闭 2.服务器的防火墙是否关闭 检查方法: service iptables status 查看防火墙状态 service iptables s ...