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. vuex(数据商店实现思想)day06

    安装创建Vue项目

  2. Google 嘘! 嘘!

    https://www.gufen.gq(无广告,原guso.ml,ggso.ga,guge.ga) https://c.aiguso.tk (无广告,体验良好) https://d.freedo.g ...

  3. PURGE 的用法说明

    PURGE PurposeUse the PURGE statement to remove a table or index from your recycle bin and release al ...

  4. Python学习---网页爬虫[下载图片]

    爬虫学习--下载图片 1.主要用到了urllib和re库 2.利用urllib.urlopen()函数获得页面源代码 3.利用正则匹配图片类型,当然正则越准确,下载的越多 4.利用urllib.url ...

  5. Mybatis学习---基础知识考核

    MyBatis 2.什么是MyBatis的接口绑定,有什么好处 接口映射就是在IBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,    我们直接调用接口方法就可以,这样比起原来了Sql ...

  6. Java实例---俄罗斯方块

    代码分析 定义格子 package com.ftl.tetris; /** * 定义格子 */ import java.awt.image.BufferedImage; public class Ce ...

  7. [EffectiveC++]item15:Provide access to raw resources in resource-managing class

    在资源管理类中提供对原始资源的访问

  8. [UOJ 0034] 多项式乘法

    #34. 多项式乘法 统计 描述 提交 自定义测试 这是一道模板题. 给你两个多项式,请输出乘起来后的多项式. 输入格式 第一行两个整数 nn 和 mm,分别表示两个多项式的次数. 第二行 n+1n+ ...

  9. Eureka 集群高可用配置.

    SERVER:1 server: port: 1111 eureka: instance: hostname: ${spring.cloud.client.ip-address} instance-i ...

  10. myeclipse解决JSP文件里script背景颜色的调整

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/UP19910522/article/details/27971401 1导入MyEclipse的主题 ...