文件操作
在 fs
模块中还提供了很多其他的文件操作方法,这些方法同样有同步方法和异步方法之分(同步方法名称是在异步方法名称后面加 Sync
后缀),但由于对文件操作时,通常都采用默认的异步方法,因此本节中主要以异步方法为例讲解文件的常见操作,主要包括截断文件、删除文件、复制文件和重命名文件。
截断文件
在 fs
模块中,可以使用 truncate()
方法对文件进行截断操作,所谓截断,是指删除文件内的一部分内容,以改变文件的大小。其语法格式如下:
fs.truncate(path[, len], callback)
-
path
:用于指定要被截断文件的完整文件路径及文件名。 -
len
:一个整数数值,用于指定被截断后的文件大小(以字节为单位)。 -
callback
:用于指定截断文件操作完毕时执行的回调函数,该回调函数中使用一个参数,参数值为截断文件操作失败时触发的错误对象。
当 |
【例7.4】修改文本文件的大小。(实例位置:资源包\源码\07\04)
在 WebStorm
中创建项目文件夹,并在该项目文件夹中添加一个 poems.txt
文本文件,文本文件的原始内容为古诗《春夜喜雨》;然后创建一个 js.js
文件,该文件中首先使用 stat()
方法获取文件的原大小,然后使用 truncate()
方法将文件的大小截断为 140 字节,最后再次获取文件的大小,代码如下:
var fs = require('fs');
fs.stat("poems.txt",function(err,stats){
console.log("原文件大小为:"+stats.size+"字节")
})
fs.truncate('poems.txt', 140, function (err) {
if (err) console.log('对文件进行截断操作失败。');
else {
fs.stat('poems.txt', function (err, stats) {
console.log('截断操作已完成\n文件大小为:' + stats.size + '字节。');
});
}
});
poems.txt
文本文件原始内容如图7.9所示,运行程序,效果如图7.10所示,然后再次打开 poems.txt
文件,可看到文件内容被更改,更改后的内容如图7.11所示。



删除文件
在 fs
模块中,可以使用 unlink()
方法对文件进行删除操作,其语法格式如下:
fs.unlink(path, callback)
-
path
:用于指定被删除文件的路径。 -
callback
:回调函数。
【例7.5】删除指定被路径下的文本文件。(实例位置:资源包\源码\07\05)
在 WebStorm
中创建项目文件夹,并在其中添加一个 poems.txt
文本文件,然后创建一个 js.js
文件,在该文件中使用 fs
模块的 unlink()
方法删除 poems.txt
文件。代码如下:
//引入模块
var fs = require("fs");
console.log("准备删除文件!");
fs.unlink('poems.txt', function (err) {
if (err) {
console.error(err);
}
console.log("文件删除成功!");
});
运行程序,即可将 poems.txt
文件删除。
复制文件
文件复制有两种形式:一种是将文件从一个位置复制到另外一个位置,另一种则是从原文件中读取数据并写入一个新文件中。针对这两种形式的文件复制操作,fs
模块都提供了相应的方法来实现。另外,由于复制文件时可能会有同步操作和异步操作,因此,本节同时讲解复制文件的同步方法和异步方法。
使用copyFile()方法与copyFileSync()方法复制文件
copyFile()
方法与 copyFileSync()
方法分别用于异步和同步复制文件,它们用来将文件从一个位置复制到另外一个位置,其语法格式如下:
fs.copyFile(src, dest[, mode], callback)
fs.copyFileSync(src, dest[, mode])
-
src
:要复制的源文件名。 -
dest
:要复制的目标文件名。 -
mode
:复制操作的修饰符,默认值为0。 -
callback
:回调函数。
【例7.6】复制文件。(实例位置:资源包\源码\07\06)
在 WebStorm
中新建一个项目文件夹,并在该项目文件夹中添加一个 poems.txt
文件;然后新建一个 js.js
文件,在 js.js
文件中使用 fs
模块的 copyFile()
方法异步复制 poems.txt
文件,将其复制为 poems1.txt
,代码如下:
var fs = require("fs")
fs.copyFile("poems.txt", "poems1.txt", function (err) { //异步复制文件
if (err) {
console.log("复制文件失败") //提示复制失败
console.log(err) //显示错误信息
}
else {
console.log("复制文件成功") //提示复制成功
}
})
项目文件夹下的原始文件如图 7.12 所示,运行程序后,再次打开项目文件夹,可以看到会多出一个 poems1.txt
文件,效果如图7.13所示。


使用 readFile() 和 writeFile() 方法复制文件
除了上面介绍的直接复制文件的方式,还可以通过复制文件内容的方式实现文件的复制,这需要使用 fs
模块中的 readFile()
方法和 writeFile()
方法。其中,readFile()
方法用来读取要复制的文件内容,writeFile()
方法用来将读取到的文件内容写入新建的文件中,从而实现复制文件的功能。例如,使用 readFile()
和 writeFile()
方法实现例 7.6 的功能,代码如下:
var fs = require("fs")
//读取文件
fs.readFile("poems.txt", "utf8", function (err, data) {
if (err) {
console.log("读取文件失败")
console.log(err)
}
else {
console.log("读取文件成功")
//写入文件
fs.writeFile("poems1.txt", data, function (err) {
if (err) {
console.log("写入文件失败")
console.log(err)
}
else {
console.log("写入文件成功")
}
})
}
})
上面使用了 |
重命名文件
在 fs
模块中,可以使用 rename()
方法为文件重命名,重命名文件的同时会更改文件的路径,其语法格式如下:
fs.rename(oldPath, newPath, callback)
-
oldPath
:原文件名(目录名)。 -
newPath
:新文件名(目录名)。 -
callback
:回调函数。
例如,下面代码可以将文件 poems.txt
重命名为 “春夜喜雨.txt”:
fs=require("fs")
fs.rename("poems.txt", "春夜喜雨.txt", function(err){
if(err){
console.log("糟糕!重命名文件失败")
console.log(err)
}
else{
console.log("重命名文件成功")
}
})
【例7.7】批量重命名文件。(实例位置:资源包\源码\07\07)
在 WebStorm
中新建一个项目文件夹,并在该项目文件夹中添加一个 demo
文件夹,其中包含以 poems
为前缀的多个文本文件,文件中的内容为不同的古诗;然后新建一个 .js
文件,该文件中使用 for
循环依次读取 demo
文件夹中所有文本文件的内容,并且将每个文本文件内容的第一行(古诗的标题)去掉所有空白字符(包括空格和换行符等),作为文本文件的新文件名。代码如下:
fs = require("fs")
//读取demo文件夹中的文件名
fs.readdir("demo", (err,files) => {
for (var i = 0; i < files.length; i++) { //遍历文件夹中的文件
fl = "demo\\" + files[i] //记录要重命名的文件名(包括路径)
//读取文件,并将文件中的内容以换行符进行分割存储到数组中
var data = fs.readFileSync(fl, "utf8").split("\n")
//获取文件中第一行内容并去掉所有空白字符(包括空格和换行符等)
var title = data[0].replace(/\s*/g, '')
fs.rename(fl, "demo\\" + title + ".txt",function (err) { // 重命名文件
// if(err)
// console.error(err.message)
})
}
})
运行程序前的文件名如图 7.14 所示,运行程序后的文件名如图 7.15 所示。

