一、fs模块
当谈到Node.js的文件系统操作和流时,我们可以深入了解它们的工作原理和如何使用它们。
Node.js提供了强大的文件系统模块(
fs
模块),它允许开发者与计算机的文件系统进行交互。你可以使用fs
模块执行各种操作,如读取文件、写入文件、复制文件、创建目录等。以下是一些常用的fs
模块方法:切记一定要导入fs模块才能进行下面的练习
1.1 读取文件(readFile):
const fs = require('fs');
//第一个参数为想要读取的文件夹,第二个参数为编码格式(可写可不写),第三个参数是回调函数
fs.readFile('file.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
在上面的例子中,我们使用readFile
方法读取一个名为file.txt
的文件。回调函数中的data
参数包含了文件的内容。
1.2 写入文件(writeFile):
const fs = require('fs');
//第一个参数为要写入的文件,第二个参数为要写入的内容,
//第三个参数是编码格式(可写可不写),第四个参数是回调函数
fs.writeFile('file.txt', 'Hello, Node.js!', 'utf8', (err) => {
if (err) throw err;
console.log('文件已写入');
});
上面的代码将字符串Hello, Node.js!
写入名为file.txt
的文件中。
1.3 复制文件(copyFile):
const fs = require('fs');
//第一个参数为被复制的文件,第二个参数为需要复制的文件,第三个参数为回调函数
fs.copyFile('source.txt', 'destination.txt', (err) => {
if (err) throw err;
console.log('文件已复制');
});
这段代码将source.txt
文件复制到destination.txt
文件。
除了基本的文件操作之外,Node.js还提供了流(Stream)的概念。流是一种用于处理大量数据的方式,它将数据分割成小块并逐个处理,而不是一次性加载整个文件到内存中。这对于处理大文件或实时数据非常有用,可以提高性能和资源利用率。
1.4 流式读取(createReadStream):
const fs = require('fs');
//创建读取流对象
const rs = fs.createReadStream('./张杰、张碧晨 - 只要平凡(bq).mp4');
//绑定data事件(获取读取到的事件)
rs.on('data',chunk=>{
console.log(chunk.length); //65536字节 = 64kb
})
//end事件 可选事件
rs.on('end',()=>{
console.log('读取成功');
})
在Node.js中,流式读取(createReadStream)是用于读取数据的一种抽象接口。它提供了一种以流的形式读取数据的方式,通过不断触发data
事件来逐块地读取数据。你可以将可读流与其他模块进行连接,实现数据的处理和传输。
1.5 流式写入(createWriteStream):
const fs = require('fs')
const gushi = fs.createWriteStream('./观书有感.txt');
//write
gushi.write('半亩方塘一鉴开\r\n');
gushi.write('天光云影共徘徊\r\n');
gushi.write('问渠哪得清如许\r\n');
gushi.write('为有源头活水来\r\n');
//关闭通道
gushi.close();
在Node.js中,流式写入(createWriteStream)是用于写入数据的一种抽象接口。它提供了一种以流的形式写入数据的方式,通过将数据块逐个写入目标位置。你可以将可写流与其他模块进行连接,实现数据的处理和传输。
除此之外,fs
模块还提供了其他文件操作方法,如删除文件、重命名文件、移动文件、操作文件夹、文件状态等。你可以根据自己的需求使用适当的方法进行文件操作。
1.6 文件删除(unlink,rm):
//导入fs模块,来操作文件
const fs = require('fs');
//方法一
//调用unlink 方法 unlinkSync
fs.unlink('./观书有感.txt',err=>{
if (err) {
console.log('删除失败');
return
}
console.log('删除成功');
})
//方法二(rm) 14.4版本 rmSync
fs.rm('./论语.txt', err => {
if (err) {
console.log('删除失败');
return
}
console.log('删除成功');
})
在上面的例子中,我们使用unlink和rm
方法来删除名为观书有感.txt和论语.txt
的文件。回调函数接收一个错误参数,如果删除过程中发生错误,该参数将包含错误信息。
需要注意的是,删除文件是不可逆操作,因此在使用unlink和rm
方法之前,请确保你真的想要删除该文件,并且在删除文件时要小心。
1.7 重命名文件(rename):
//导入fs模块,来操作文件
const fs = require('fs');
//调用rename(重命名)方法
//第一个参数文件的路径,第二个参数是重命名的路径,第三个参数是回调函数
fs.rename('./座右铭.txt','./论语.txt',err=>{
if (err) {
console.log('操作失败');
return
}
console.log('操作成功');
})
在上面的例子中,我们使用rename
方法将名为座右铭.txt
的文件重命名为论语.txt
。回调函数接收一个错误参数,如果重命名过程中发生错误,该参数将包含错误信息。
需要注意的是,重命名文件可能会导致文件被覆盖或移动到不同的位置。在使用rename
方法之前,请确保你真的想要重命名该文件,并且在重命名文件时要小心。
1.8 移动文件(rename):
const fs = require('fs')
//文件移动
fs.rename('./data.txt','./resource/data.txt',err=>{
if (err) {
console.log('操作失败');
return
}
console.log('操作成功');
})
在上面的例子中,我们使用rename
方法将data.txt
移动到resource.data.txt路径下。回调函数接收一个错误参数,如果移动过程中发生错误,该参数将包含错误信息。
需要注意的是,移动文件实际上是通过对文件进行重命名来实现的。因此,与重命名文件一样,请在移动文件时小心操作,确保目标路径和文件名正确且不会导致文件冲突。
1.9 创建文件夹(mkdir):
//导入fs模块,来操作文件
const fs = require('fs');
//创建文件夹mkdir
fs.mkdir('./html',err=>{
if (err) {
console.log('创建失败');
return
}
console.log('创建成功');
});
//递归创建 recursive递归
fs.mkdir('./a/b/c',{recursive:true},err=>{
if (err) {
console.log('创建失败');
return
}
console.log('创建成功');
});
在上面的例子中,通过mkdir创建出来一个html的文件夹,递归创建也是通过mkdir来创建,里面的recursive:true是递归的意思,就是创建出来一个嵌套的文件夹,主要用于文件夹需要过多的时候使用。
1.10 读取文件夹(readdir):
//导入fs模块,来操作文件
const fs = require('fs');
//读取文件夹 err错误信息 data读取到的信息
fs.readdir('./resource',(err,data)=>{
if (err) {
console.log('失败');
return
}
console.log(data);
});
1.11 删除文件夹(rmdir):
const fs = require('fs')
//删除文件夹
fs.rmdir('./html',err=>{
if (err) {
console.log('删除失败');
return
}
console.log('删除成功');
});
1.12文件夹状态(stat):
//导入fs模块,来操作文件
const fs = require('fs');
//调用stat 状态
fs.stat('./resource/data.txt', (err, data) => {
if (err) {
console.log('操作失败');
return
}
// console.log(data);
//判断是不是文件isFile
console.log(data.isFile());
//判断是不是文件夹isDirectory
console.log(data.isDirectory());
})
二、path模块
在Node.js中,path
模块是一个内置模块,用于处理文件路径和目录路径。它提供了一些方法来操作和转换路径,使其在不同操作系统下具有可移植性。
要使用path
模块,你需要首先通过require
语句将其引入:
const path = require('path')
下面是一些常用的path
模块方法:
2.1 path.join()
:将多个路径片段拼接成一个完整的路径。它会自动根据当前操作系统使用正确的路径分隔符。
//导入path模块
const path = require('path');
const fullPath = path.join('path', 'to', 'file.txt');
console.log(fullPath);
// 输出:path/to/file.txt
2.2path.resolve()
:将相对路径解析为绝对路径。它会将路径解析为当前工作目录下的绝对路径。
//导入path模块
const path = require('path');
const absolutePath = path.resolve('path', 'to', 'file.txt');
console.log(absolutePath);
// 输出:/当前工作目录的绝对路径/path/to/file.txt
2.3path.basename()
:获取文件路径的基本名称(即文件名),可选择性地指定文件扩展名。
//导入path模块
const path = require('path');
const filePath = '/path/to/file.txt';
const basename = path.basename(filePath);
console.log(basename);
// 输出:file.txt
const filenameWithoutExt = path.basename(filePath, '.txt');
console.log(filenameWithoutExt);
// 输出:file
2.4path.dirname(path)
:获取路径的目录名。
//导入path模块
const path = require('path');
const filePath = '/path/to/file.txt';
const dirname = path.dirname(filePath);
console.log(dirname);
// 输出:/path/to
2.5path.extname(path)
:获取路径的扩展名。
//导入path模块
const path = require('path');
const filePath = '/path/to/file.txt';
const extname = path.extname(filePath);
console.log(extname);
// 输出:.txt
2.6path.parse(path)
:解析路径字符串,返回一个包含文件路径信息的对象。
//导入path模块
const path = require('path');
const filePath = '/path/to/file.txt';
const pathInfo = path.parse(filePath);
console.log(pathInfo);
// 输出:
// {
// root: '/',
// dir: '/path/to',
// base: 'file.txt',
// ext: '.txt',
// name: 'file'
// }
以上只是path
模块提供的一些常用方法,还有其他方法可供使用。你可以查阅Node.js官方文档以获取更详细的信息。
总结而言,path
模块是Node.js的一个内置模块,用于处理文件路径和目录路径。它提供了一些方法来操作和转换路径,使其在不同操作系统下具有可移植性。