文章目录
一、系统模块fs–文件操作
f(file)s(system):文件操作系统
fs 文件系统 | Node.js API 文档 (nodejs.cn)
require(‘fs’)
想要使用node.js系统模块中的 fs系统模块
,首先需要在当前模块中引入 fs
。
const fs = require('fs');
fs.readFile()
fs.readFile(path[, options], callback);
功能:读取指定文件中的内容
格式:
fs.reaFile('文件路径/文件名称'[,'文件编码'], callback);
fs.readFile(path[, options], callback)
参数说明:
- path : 必选,字符串,表示文件路径
- options: 可选,表示以什么 编码格式 来读取文件
- callback: 必选, 文件读取完毕后, 通过回调函数
callback
拿到读取结果
举例:
//readFile.js
//示例:以utf-8的编码格式,读取上一级css目录下中的base.css并获取返回结果
const fs = require('fs');
fs.readFile('../css/base.css', 'utf-8', (err, dataStr) => {
if(err == null){
console.log("文件读取成功, 内容为: " + dataStr);
//如果成功读取文件,返回读取文件结果
return dataStr;
}else {
//文件读取失败,输出错误对象,(err.message -> 错误简要信息)
console.log(err);
}
}
)
callback 中的参数(err, doc) 说明
err:
- 如果文件读取失败,参数err值:一个包含错误信息的对象
- 如果文件读取成功,参数err值:null
dataStr:是文件读取的结果
可见,node api 中的 callback 是以 错误优先 的回调函数
运行结果:
- 读取成功
- 读取失败
fs.writeFile()
fs.writeFile(file, data[, options], callback)
功能:向指定的文件中写入内容
格式:
fs.writeFile(file, data[, options], callback)
参数说明:
- file: 必选,文件路径的字符串,表示文件的存放路径
- data: 必选,表示要写入的内容
- options: 可选,表示以什么格式写入文件内容,默认值为
utf-8
- callback: 必选, 文件写入完成之后的回调函数
举例:
//writeFile.js
//示例:在当前目录下的index.html文件内写入内容
const fs = require('fs');
const content = '<h3>正在使用fs.writeFile写入文件内容</h3>';
fs.writeFile('./index.html', content, err => {
//如果该目录下这个文件不存在,系统会自动创建该文件
if(err != null){
//文件内容写入失败
console.log(err);
console.log("-------------");
console.log(err.message)
return;
}
console.log('文件写入成功');
fs.readFile('../index.html', 'utf-8', (err, dataStr) => {
console.log(dataStr);
})
})
callback 的参数 err 说明:
- 如果文件写入成功,err值:null
- 如果文件写入失败,err值:一个包含错误信息的对象
运行结果:
注意:
fs.writeFile()
方法只能用来创建文件(当指定文件不存在时),不能用来创建路径- 重复调用
fs.writeFile()
写入同一个文件,新写入的内容会覆盖之前的旧内容
fs 模块 - 路径动态拼接的问题
在使用 fs 模块操作文件时,如果提供的操作路径是以 ./ 或 …/ 开头的相对路径时,很容易出现路径动态拼接错误的问题。
原因:代码在运行的时候,会以执行 node 命令时所处的目录,动态拼接出被操作文件的完整路径。
解决方案:在使用 fs 模块操作文件时,直接提供完整的路径,不要提供 ./ 或 …/ 开头的相对路径,从而防止路径动态拼接的问题。
//不要使用 ./ 或 ../ 这样的相对路径
fs.readFile('./files/1.txt', 'uft-8', function(err, dataStr){
})
// 使用完整的路径
fs.readFile(__dirname + '/files/1.txt', 'uft-8', function(err, dataStr){
})
二、系统模块path–路径操作
global.__dirname
作用:返回当前模块的绝对路径
相对路径VS绝对路径
- 大多数情况下使用绝对路径,因为相对路径有时候相对的是命令行工具的当前工作目录
- 在读取文件或者设置文件路径时都会选择绝对路径
- 使用
__dirname
获取当前文件所在的绝对路径 require()
方法里可以写相对路径,是相对当前模块所在目录,而不是命令行工具的当前工作目录
/*
test.js
*/
var first = 'hello nodejs';
console.log(first);
/*
relativeOrAbsolute.js
*/
const fs = require('fs');
fs.readFile('./test.js', 'utf8', (err, doc) => {
console.log(err)
console.log(doc)
});
当前命令行窗口工具工作目录与文件relativeOrAbsolute.js
目录不匹配,node.js运行结果:
使用__dirname
返回被读取文件的绝对路径,改进代码
/*
relativeOrAbsolute.js
*/
const fs = require('fs');
const path = require('path');
console.log(__dirname);//获取当前模块绝对路径
console.log(path.join(__dirname, 'test.js'))//获取目标文件绝对路径
fs.readFile(path.join(__dirname, 'test.js'), 'utf8', (err, doc) => {
console.log(err)
console.log(doc)
});
require(‘path’)
想要使用node.js系统模块中的 path系统模块
,首先需要在当前模块中引入 path
。
const path = require('path');
path.join()
路径拼接问题:不同操作系统的路径分隔符不统一
- Windows系统 路径分隔符:
\ 或者 /
- Linux系统 路径分隔符:
/
- …
实际场景:用户能在网站上上传头像,网站开发者需要指定头像文件上传到服务器的路径,而功能代码是运行在 Linus 系统上的,路径分隔符不好确定。
path.join()能解决路径分隔符的问题,只需要指定路径名,该方法能自动匹配系统生成相应的路径分隔符
功能:可以把多个路径片段拼接为完整的路径字符串并返回出来
格式:
path.join([...paths]);
参数说明:
- …path<string>: 路径片段的序列
- 返回值:<string> 拼接好的路径字符
举例:
const path = require('path');
var pathStr1 = path.join('a', 'b','c');
console.log(pathStr1);
var pathStr2 = path.join('/a','/b/c', '../','./d', 'e');
console.log(pathStr2);
var pathStr3 = path.join(__dirname, './file/1.txt')
console.log(pathStr3);
运行结果
path.basename()
path.basename(path[, ext])
功能:可以获取路径中的最后一部分,经常通过这个方法获取路径中的文件名。
格式:
path.basename(path[, ext]);
参数说明:
- path<string>: 必选,表示一个路径的字符串
- ext<string>: 可选,表示文件扩展名
- 返回:<string>, 表示路径中的最后一部分
举例:
const path = require('path');
var fpath = '/a/b/c/index.html';
var fullName = path.basename(fpath);
console.log(fullName); //输出 index.html
var nameWithoutExt = path.basename(fpath, '.html')
console.log(nameWithoutExt); //输出 index
path.extname()
path.extname(path)
功能:获取路径中的文件扩展名
格式:
path.extname(path)
参数说明:
- path<String>:必选,表示一个路径字符串
- 返回值:<string> 返回得到的扩展名字字符串
举例:
const path = require('path');
const fpath = '/a/b/c/index.html'; //路径字符串
const fext = path.extname(fpath);
console.log(fext); //输出 .html