当我们需要将文件或文件夹从一个位置复制到另一个位置时,Node.js为我们提供了一个内置的模块——fs(文件系统模块)。使用该模块,我们可以方便地进行文件和文件夹的复制。
复制文件
我们可以使用fs.createReadStream()
方法创建一个可读流,然后将其复制到另一个可写流中,如下所示:
const fs = require('fs');
const path = require('path');
const sourcePath = path.join(__dirname, 'source.txt');
const destinationPath = path.join(__dirname, 'destination.txt');
const readStream = fs.createReadStream(sourcePath);
const writeStream = fs.createWriteStream(destinationPath);
readStream.pipe(writeStream);
console.log(`File copied from "${sourcePath}" to "${destinationPath}"`);
在该示例中,我们使用path.join()
方法拼接出源文件路径和目标文件路径。然后,我们使用fs.createReadStream()
方法创建一个可读流,该流从源文件读取数据。
我们还使用fs.createWriteStream()
方法创建一个可写流,该流将数据写入目标文件中。最后,我们使用readStream.pipe(writeStream)
方法将可读流复制到可写流中,从而将源文件中的内容复制到目标文件。
复制文件夹
对于复制文件夹,我们可以使用fs.mkdirSync()
、fs.readdirSync()
和fs.statSync()
等方法来实现。具体过程如下:
-
首先,我们需要通过
fs.mkdirSync()
方法创建目标文件夹。 -
然后,我们需要使用
fs.readdirSync()
方法遍历源文件夹中的每个文件和子文件夹。 -
对于每个文件或子文件夹,我们需要使用
fs.statSync()
方法来获取其详细信息。 -
如果该项是文件,我们可以使用
fs.createReadStream()
和fs.createWriteStream()
方法复制文件。如果该项是文件夹,则需要使用递归来复制子文件夹。
下面是一个示例程序,用于复制一个文件夹:
const fs = require('fs');
const path = require('path');
function copyFolderRecursiveSync(source, target) {
// 创建目标文件夹
if (!fs.existsSync(target)) {
fs.mkdirSync(target);
}
// 遍历源文件夹中的每个文件或子文件夹
fs.readdirSync(source).forEach((file) => {
// 构造源文件/文件夹的完整路径
const sourcePath = path.join(source, file);
// 构造目标文件/文件夹的完整路径
const targetPath = path.join(target, file);
// 获取文件/文件夹的详细信息
const stat = fs.statSync(sourcePath);
if (stat.isFile()) {
// 如果是文件,则直接复制文件
fs.copyFileSync(sourcePath, targetPath);
} else if (stat.isDirectory()) {
// 如果是文件夹,则递归复制文件夹
copyFolderRecursiveSync(sourcePath, targetPath);
}
});
}
// 复制文件夹
const sourcePath = path.join(__dirname, 'source');
const destinationPath = path.join(__dirname, 'destination');
copyFolderRecursiveSync(sourcePath, destinationPath);
console.log(`Folder copied from "${sourcePath}" to "${destinationPath}"`);
在该示例中,我们定义了一个名为copyFolderRecursiveSync()
的函数,该函数用于递归复制一个文件夹。函数使用fs.existsSync()
和fs.mkdirSync()
方法创建目标文件夹。
然后,它会使用fs.readdirSync()
方法遍历源文件夹中的每个文件或子文件夹。对于每个文件或文件夹,我们使用fs.statSync()
方法获取其详细信息。如果该项是文件,则使用fs.copyFileSync()
方法复制文件。如果该项是文件夹,则使用递归调用copyFolderRecursiveSync()
方法来复制文件夹。
├── source
│ ├── file1.txt
│ ├── folder1
│ │ ├── file2.txt
│ │ └── sub-folder1
│ │ ├── file3.txt
│ │ └── file4.txt
│ ├── folder2
│ └── file5.txt
├── destination
│ ├── file1.txt
│ ├── folder1
│ │ ├── file2.txt
│ │ └── sub-folder1
│ │ ├── file3.txt
│ │ └── file4.txt
│ ├── folder2
│ └── file5.txt
假设我们有以下的文件结构:
source
├── file1.txt
├── folder1
│ ├── file2.txt
│ └── sub-folder1
│ ├── file3.txt
│ └── file4.txt
├── folder2
└── file5.txt
我们将运行以下代码来复制整个文件夹:
const sourcePath = path.join(__dirname, 'source');
const destinationPath = path.join(__dirname, 'destination');
copyFolderRecursiveSync(sourcePath, destinationPath);
console.log(`Folder copied from "${sourcePath}" to "${destinationPath}"`);
执行完毕后,将会在目标文件夹中得到与源文件夹相同的文件结构。
以上是将Node.js使用内置的fs模块来复制文件/文件夹的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Nodejs 复制文件/文件夹的方法 - Python技术站