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. window 7 & 2008R2 多核cpu套接字泄露补丁

    http://hotfixv4.microsoft.com/Windows%207/Windows%20Server2008%20R2%20SP1/sp2/Fix373886/7600/free/43 ...

  2. 哪个HTML5内建对象用于在画布上绘制?()

    哪个HTML5内建对象用于在画布上绘制?() getContent getContext getGraphics getCanvas 我的理解: A.C.D不存在HTML5,,js方法中 HTML 5 ...

  3. 使用 Azure PowerShell 将 IaaS 资源从经典部署模型迁移到 Azure Resource Manager

    以下步骤演示了如何使用 Azure PowerShell 命令将基础结构即服务 (IaaS) 资源从经典部署模型迁移到 Azure Resource Manager 部署模型. 也可根据需要通过 Az ...

  4. 【Oracle】Update方法

    1.单表更新 update customers set city_name='山西省太原市' where city_name='山西太原' 2.两表(多表)关联update -- 被修改值由另一个表运 ...

  5. java 分次读取大文件的三种方法

    1. java 读取大文件的困难 java 读取文件的一般操作是将文件数据全部读取到内存中,然后再对数据进行操作.例如 Path path = Paths.get("file path&qu ...

  6. Python实例---抽屉热搜榜前端代码分析

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Java实例---计算器实例

    1.计算器上的键的显示名字 1.0 继承JFrame类 public class Calculate extends JFrame { } 1.1定义常量 /** 计算器上的键的显示名字 */ pub ...

  8. Nginx性能问题答疑

    为什么Nginx的总体性能比Apache高? Nginx使用的是epoll模型和kqueue的网络I/O模型Apache使用的是传统的select模型.目前linux的高并发场景使用的都是epoll模 ...

  9. QT5连接Mysql

    摘要 在Qt 5中已经提供了对MySQL数据库的默认支持,要想使用该数据库,需要先进行数据库的安装, 这里我们介绍下在Windows系统中MySQL数据库的安装和简单使用.   Qt如何利用Mysql ...

  10. Using shared access signatures (SAS) From Microsoft

    A shared access signature (SAS) provides you with a way to grant limited access to objects in your s ...