Node.js - fs.path模块
首先我有话说,是谁说的学完ajax就可以去vue了,太天真了我,学会js钻出来个ajax,学完ajax钻出来个node.js这一步步的,当然node不会学到太深入把表面的认识一下就可以了,这之后可能更新速度要慢一点了,因为这几天会把时间花在论文上,马上要进入答辩了,虽然我现在那是有非常的浓厚的兴趣想见识一下node的姿态啊。进入正题吧
1.
今天首先介绍一下什么是node.js?
node.js是一个基于Chrome V8引擎的js运行环境,注意是一个运行环境,浏览器是js前端的运行环境,而我们node就是js后端的运行环境,并且在node.js中无法调用DOM、BOM以及ajax的一些api。
怎么来学习node.js呢?
就跟我们js学习一样,先基础语法再webapi。node是先js基础语法,然后再node.js内置api(fs、path、http等)再去第三方的api(express、mysql等)
怎么用node来执行js?
通过终端来实现,win+r打开cmd然后cd进入js文件所在的目录在执行node js文件名.js
更简便方法,直接进入这个目录然后按住shift+右键鼠标找到打开shellpower直接可运行node。当然我实在vscode上可以直接运行终端还多方便的
2.
进入我们今天第一个学习目标,fs文件系统模块,这是一个操作文件的模块。想要使用它必须先得导入,当然在这些node内置的api都是安装node的时候就有的你只需要导入即可
在这个模块里面有两个方法第一个是读取指定文件内容
fs.readFile(path【,options】,callback)
path:文件的路径
options: 以什么样的编码来读取文件
callback:读取后的回调函数
const fs = require('fs')
fs.readFile('./file/read.txt', 'utf-8', function(err, dataStr) {
console.log(err);
console.log(dataStr);
})

const fs = require('fs')
fs.readFile('./file/errread.txt', 'utf8', (err, dataStr) => {
if (!err) {
return console.log('读取成功' + dataStr);
}
return console.log('读取失败' + err.message);
})
其中在这里面err=null表示读取成功且此时dataStr就为里面的内容,否则就读取失败
既然有读取那就有写入,写入文件内容
fs.writeFile(path,data[,options],callback)
path:写入文件的地址 注意 :这个地址可以拿来创建文件但不能创建目录
data:写入的数据
const fs = require('fs')
fs.writeFile('./file/write.txt', 'hello fswrite', err => console.log(err))

const fs = require('fs')
fs.writeFile('./fileerr/write1.txt', '写入成功',err => {
if(!err) {
return console.log('写入成功' + err);
}
return console.log('写入失败' + err.message);
})
在这里面其实是有问题的,因为node是采取的动态拼接地址,也就是如果你的地址是以./或者../开头的相对地址的话,那么到时候执行它是以你执行node的地址拼接上你写入的这个地址,你想想是不是会有bug产生,而且这个时候你就算补全执行也是没得用的。
面对这种情况有两张解决方法,一种是对你要操作的地址采用绝对路径的方式
一种是通过__dirname这个属性可以获得当前文件所在的目录然后再通过我下面讲的内容组合起来就可以完美解决
只不过在这之前先看到一个案例,将一个txt文件横向排列以等号形式建立的一个成绩文本转换成纵向排列以键值对建立的文本怎么来操作
小红=99 小白=100 小黄=70 小黑=66 小绿=88
// 将成绩案例转到file里面的ok.txt 同时将里面的横向排列转为纵向排列
// 1.读取文件
const fs = require('fs')
fs.readFile('./成绩.txt', 'utf-8', (err, dataStr) => {
if(!err) {
// console.log(dataStr);
// 2.处理数据将其转换为数组换成引号再添加换行转义字符
const arrOld = dataStr.split(' ')
const arrNew = []
arrOld.forEach(item => {
arrNew.push(item.replace('=', ':'))
})
// console.log(arrNew);
const str = arrNew.join('\n')
console.log(str);
// 3.写入文件
return fs.writeFile('./file/ok.txt', str, err => {
if (err) {
return console.log('加入文件失败');
}
return console.log('加入文件成功');
})
}
return console.log('查找文件失败');
})

2.
第二个模块path模块
这个模块是拿来处理路径的模块,同样的也要先导入
第一个方法路径拼接
path.join(path)
可以将多个目录拼接起来
const path = require('path')
const pathStr = path.join('/a', '/b/c', '../', '/d', 'e')
console.log(pathStr);
const fs = require('fs')
fs.readFile(path.join(__dirname, 'file/ok.txt'), 'utf-8', (err, dataStr) => {
if (err) {
return console.log('读取失败');
}
return console.log('读取成功\n' + dataStr);
})
path里面还有一个方法是获取路径中的文件名
path.basename(path[,ext])
ext: 扩展名 如果写了扩展名那么找到这个文件名后输出格式将没有扩展名
const path = require('path')
let fileName = path.basename(path.join(__dirname, '/file/ok.txt'))
console.log(fileName);
let fileName1 = path.basename(path.join(__dirname, '/file/ok.txt'), '.txt')
console.log(fileName1);

与这个功能大概类似的还有一个可以获取文件的扩展名
path.extname(path)
3.
接下来看到一个案例,给定一个index.html,里面可以实现数字时钟的效果,其css html js代码都在里面,要做的是把css、js抽离出来通过外联的方式引入进来
// 1.导入所需要的包
const fs = require('fs')
const path = require('path')
// 1.1创建两个正则把style和script标签找出来
const regStyle = /<style>[\d\D]*<\/style>/
const regScript = /<script>[\s\S]*<\/script>/
// 2.fs读取这个文件
fs.readFile(path.join(__dirname, './index.html'), 'utf-8', (err, dataStr) => {
if(err) {
return console.log('读取文件失败');
}
// 2.1读取成功用正则把匹配到的字符串放到对应的文件里面
let styleStr = regStyle.exec(dataStr)
// console.log(styleStr[0]);
styleStr[0] = styleStr[0].replace('<style>','').replace('</style>','')
fs.writeFile(path.join(__dirname,'/clock/index.css'),styleStr[0], err => {
if (err) {
return console.log('写入文件失败' + err.message);
}
return console.log('写入文件成功'); })
// 2.2script标签放入文件
let scriptStr = regScript.exec(dataStr)
// console.log(scriptStr[0]);
scriptStr[0] = scriptStr[0].replace('<script>', '').replace('</script>', '')
fs.writeFile(path.join(__dirname , '/clock/index.js'), scriptStr[0], err => {
if (err) {
return console.log('写入失败' + err.message);
}
return console.log('写入成功');
})
// 2.3修改html代码部分
let newHtml = dataStr.replace(regStyle, '<link rel="stylesheet" href="./clock/index.css">').replace(regScript, '<script src="./clock/index.js"></script>')
fs.writeFile(path.join(__dirname, './index.html'), newHtml, err => {
if (err) {
return console.log('写入html失败');
}
return console.log('写入html成功');
})
})
<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>index首页</title>
<style>
html,
body {
margin: 0;
padding: 0;
height: 100%;
background-image: linear-gradient(to bottom right, red, gold);
} .box {
width: 400px;
height: 250px;
background-color: rgba(255, 255, 255, 0.6);
border-radius: 6px;
position: absolute;
left: 50%;
top: 40%;
transform: translate(-50%, -50%);
box-shadow: 1px 1px 10px #fff;
text-shadow: 0px 1px 30px white; display: flex;
justify-content: space-around;
align-items: center;
font-size: 70px;
user-select: none;
padding: 0 20px; /* 盒子投影 */
-webkit-box-reflect: below 0px -webkit-gradient(linear, left top, left bottom, from(transparent), color-stop(0%, transparent), to(rgba(250, 250, 250, .2)));
}
</style>
</head> <body>
<div class="box">
<div id="HH">00</div>
<div>:</div>
<div id="mm">00</div>
<div>:</div>
<div id="ss">00</div>
</div> <script>
window.onload = function () {
// 定时器,每隔 1 秒执行 1 次
setInterval(() => {
var dt = new Date()
var HH = dt.getHours()
var mm = dt.getMinutes()
var ss = dt.getSeconds() // 为页面上的元素赋值
document.querySelector('#HH').innerHTML = padZero(HH)
document.querySelector('#mm').innerHTML = padZero(mm)
document.querySelector('#ss').innerHTML = padZero(ss)
}, 1000)
} // 补零函数
function padZero(n) {
return n > 9 ? n : '0' + n
}
</script>
</body> </html>

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>index首页</title>
<link rel="stylesheet" href="./clock/index.css">
</head> <body>
<div class="box">
<div id="HH">00</div>
<div>:</div>
<div id="mm">00</div>
<div>:</div>
<div id="ss">00</div>
</div> <script src="./clock/index.js"></script>
</body> </html>
Node.js - fs.path模块的更多相关文章
- Node.js fs文件系统模块
一.读取文件几个步骤 1.先引入fs文件系统模块 2.使用readfile 或 readFileSync 注意点:它们的回调函数有两个参数,第一个是err,第二个是data,得到的data是buffe ...
- node.js的path模块
path模块的各种API path.join([...paths]) 参数:paths <string> ,paths参数是字符串,这些字符串按路径片段顺序排列,(A sequence o ...
- Node.js学习——基本模块之fs
基本模块之fs 异步读文件 异步读取一个文本文件的代码如下: 'use strict'; var fs = require('fs'); fs.readFile('sample.txt', 'utf- ...
- 从官网学习Node.js FS模块方法速查
最新文档请查看仓库 https://github.com/wangduandu... 1. File System 所有文件操作提供同步和异步的两种方式,本笔记只记录异步的API 异步方式其最后一个参 ...
- Node.js——fs模块(文件系统),创建、删除目录(文件),读取写入文件流
/* 1. fs.stat 检测是文件还是目录(目录 文件是否存在) 2. fs.mkdir 创建目录 (创建之前先判断是否存在) 3. fs.writeFile 写入文件(文件不存在就创建,但不能创 ...
- Node.js FS模块方法速查
1. File System 所有文件操作提供同步和异步的两种方式,本笔记只记录异步的API 异步方式其最后一个参数是回调函数.回调函数的第一个参数往往是错误对象,如果没有发生参数,那么第一个参数可能 ...
- Node.js的Formidable模块的使用
今天总结了下Node.js的Formidable模块的使用,下面做一些简要的说明. 1) 创建Formidable.IncomingForm对象 var form = new formidab ...
- node.js的File模块
1.Node.js是什么? (1) Nodejs是为了开发高性能的服务器而诞生的一种技术 (2) 简单的说 Node.js 就是运行在服务端的 JavaScript,基于V8进行运行 (3) Node ...
- Node.js入门:模块机制
CommonJS规范 早在Netscape诞生不久后,JavaScript就一直在探索本地编程的路,Rhino是其代表产物.无奈那时服务端JavaScript走的路均是参考众多服务器端语言来 ...
- node.js中express模块创建服务器和http模块客户端发请求
首先下载express模块,命令行输入 npm install express 1.node.js中express模块创建服务端 在js代码同文件位置新建一个文件夹(www_root),里面存放网页文 ...
随机推荐
- ES6常用知识点笔记
ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准. 因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015(简称ES2015).虽然浏览器在不 ...
- Splashtop用于远程实验室的功能得到增强
加利福尼亚州圣何塞,2020年8月11日,远程访问和远程支持解决方案的领导者Splashtop Inc. 宣布更新其 Splashtop for Remote Labs 产品.该产品旨在帮助学生通 ...
- .NET C#导出解决方案的NuGet依赖关系
前言 公司项目需要写DS设计文档,文档需要标识出来你的解决方案文件下的所有项目都使用了NuGet哪些第三方依赖,我们都知道sln下面的所有.csproj文件中的节点下会标识出对应的依赖,但一个一个对比 ...
- 【iOS逆向与安全】iOS远程大师:通过H5后台远程查看和协助iPhone设备
前言 在移动设备测试和远程协助的过程中,能够远程查看和协助iPhone设备是一项非常实用的功能.为了解决这一需求,我开发了一款名为iOS远程大师的产品,允许用户通过H5后台界面查看和协助越狱或非越狱的 ...
- pageoffice6 实现提取数据区域为子文件(Word拆分)
在实际的开发过程中,有时会遇到希望提取Word文档中部分内容保存为子文件的需求,PageOffice支持提取Word文档数据区域中的内容为一个Word文件流,在服务器端创建PageOffice的Wor ...
- C++ 初始化列表(Initialization List)
请注意以下继承体系中各class的constructors写法: 1 class CPoint 2 { 3 public: 4 CPoint(float x=0.0) 5 :_x(x){} 6 7 f ...
- 节能降耗 | AIRIOT智慧电力综合管理解决方案
电力技术的发展推动各行各业的生产力,与此同时,企业中高能耗设备的应用以及输配电过程中的电能损耗,也在一定程度上加剧了电能供应压力.以工业制造业为例,企业的管理水平.能耗结构.生产组织方式都关系到能 ...
- springboot 整合mail 发送邮件
springboot 整合mail 发送邮件 pom.xml <properties> <java.version>1.8</java.version> <p ...
- 深入解析LinkedHashMap
LinkedHashMap是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的,也可以在构造时带参数,按照访问次序排序. ...
- Xenocode Postbuild——C#代码混淆器使用方法
安装 不多作赘述 使用步骤 选择[application]选项卡,选择[add],如果添加的是exe,则[Preset]选择第一项,添加的是dll则选择第二项 选择[Protect]选项卡,将两个都勾 ...