Node.js模块详解

本文介绍了Node.js的fs模块,用于读取、写入、复制和管理文件,以及流的概念,如createReadStream和createWriteStream。同时讲解了path模块,用于处理和转换跨平台的文件路径,包括join、resolve、basename等方法。
摘要由CSDN通过智能技术生成

一、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的一个内置模块,用于处理文件路径和目录路径。它提供了一些方法来操作和转换路径,使其在不同操作系统下具有可移植性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值