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. Android解析WindowManagerService(一)WMS的诞生

    前言 此前我用多篇文章介绍了WindowManager,这个系列我们来介绍WindowManager的管理者WMS,首先我们先来学习WMS是如何产生的.本文源码基于Android 8.0,与Andro ...

  2. org.springframework.data.mongodb.core.MongoTemplate]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: org.springframework.core.convert.support.ConversionServiceFactory.cr

    spring-data-mongo 和spring core包冲突.解决办法: <dependency> <groupId>org.springframework.data&l ...

  3. winform打包发布安装包详解..

    winform打包发布安装包详解..   使用VS 自带的打包工具,制作winform安装项目 开发环境:VS 2008 Access 操作系统:Windows XP 开发语言:C# 项目名称:**管 ...

  4. Java学习---XML的读写操作

    DOM4_Jwriter.java package com.ftl.xmlparse; import java.io.File; import java.io.FileNotFoundExceptio ...

  5. 企业级NGINX的重定向rewrite

    vim /usr/local/nginx/conf/nginx.conf server { listen 80; server_name www.ftl.com; rewrite ^/(.*) htt ...

  6. Exchange 2016证书配置

    配置证书: 第一步,在ECP界面生成证书请求文件: 1.在“服务器 —>证书”界面,选择一台服务器,点击“+”来添加证书申请,如下图: 2.默认下一步, 3.填写证书的友好名称,如下图: 4.默 ...

  7. 计算机作业(Excel课程表) 物联网 王罗红

  8. 点开无线显示"已连接 安全",但是点击下面无线图标却显示"无法连接internet",解决方案

    管理员权限运行“命令提示符” 输入:netsh winsock reset 然后重启电脑即可

  9. [BZOJ 2322][BeiJing2011]梦想封印

    梦想封印 题意 原题面: Problem 2322. -- [BeiJing2011]梦想封印 2322: [BeiJing2011]梦想封印 Time Limit: 20 Sec  Memory L ...

  10. PyCharm最新2018激活码,最新方法

    内容:通过修改hosts文件,让pycharm不能够联网验证激活码的方式.我在kali和win10都成功了 1.修改hosts文件 Windows文件位置:C:\Windows\System32\dr ...