前端开发系列084-Node篇之fs
一、模块介绍
fs文件模块(File System)是Node的内置核心模块之一,代码中可以通过var fs = require("fs")
直接加载和使用,该模块提供了操作文件系统的诸多API,且所有方法均提供了同步和异步操作两个版本。
wendingding$ node
> fs
{ constants: { ··省略··· },
Stats: [Function: Stats],
F_OK: 0,
R_OK: 4,
W_OK: 2,
X_OK: 1,
access: [Function],
accessSync: [Function],
exists: [Function],
existsSync: [Function],
readFile: [Function],
readFileSync: [Function],
close: [Function],
closeSync: [Function],
open: [Function],
openSync: [Function],
read: [Function],
readSync: [Function],
write: [Function],
writeSync: [Function],
rename: [Function],
renameSync: [Function],
truncate: [Function],
truncateSync: [Function],
ftruncate: [Function],
ftruncateSync: [Function],
rmdir: [Function],
rmdirSync: [Function],
fdatasync: [Function],
fdatasyncSync: [Function],
fsync: [Function],
fsyncSync: [Function],
mkdir: [Function],
mkdirSync: [Function],
readdir: [Function],
readdirSync: [Function],
fstat: [Function],
lstat: [Function],
stat: [Function],
fstatSync: [Function],
lstatSync: [Function],
statSync: [Function],
readlink: [Function],
readlinkSync: [Function],
symlink: [Function],
symlinkSync: [Function],
link: [Function],
linkSync: [Function],
unlink: [Function],
unlinkSync: [Function],
fchmod: [Function],
fchmodSync: [Function],
lchmod: [Function],
lchmodSync: [Function],
chmod: [Function],
chmodSync: [Function],
lchown: [Function],
lchownSync: [Function],
fchown: [Function],
fchownSync: [Function],
chown: [Function],
chownSync: [Function],
_toUnixTimestamp: [Function: toUnixTimestamp],
utimes: [Function],
utimesSync: [Function],
futimes: [Function],
futimesSync: [Function],
writeFile: [Function],
writeFileSync: [Function],
appendFile: [Function],
appendFileSync: [Function],
watch: [Function],
watchFile: [Function],
unwatchFile: [Function],
realpathSync: [Function: realpathSync],
realpath: [Function: realpath],
mkdtemp: [Function],
mkdtempSync: [Function],
copyFile: [Function],
copyFileSync: [Function],
createReadStream: [Function],
ReadStream:
{ [Function: ReadStream]
super_:
{ [Function: Readable]
ReadableState: [Function: ReadableState],
super_: [Object],
_fromList: [Function: fromList] } },
FileReadStream:
{ [Function: ReadStream]
super_:
{ [Function: Readable]
ReadableState: [Function: ReadableState],
super_: [Object],
_fromList: [Function: fromList] } },
createWriteStream: [Function],
WriteStream:
{ [Function: WriteStream]
super_: { [Function: Writable] WritableState: [Function: WritableState],
super_: [Object] } },
FileWriteStream:
{ [Function: WriteStream]
super_: { [Function: Writable] WritableState: [Function: WritableState],
super_: [Object] } } }
在该模块中,所有的文件操作都提供了同步
和异步
两种方法(譬如:readFile
和readFileSync
方法)。这些方法在使用的时候,其使用方式和参数情况基本都是一致的。
如果是异步方法,那么其语法形式总是为function (err,callback)
,最后一个参数代表操作完成的回调函数,第一个参数通常是操作错误的异常(如果操作成功,该参数的值为null
或undefined
),需注意异步方法不能保证执行顺序,如果对多个异步任务的执行顺序有要求,那么应该把后面的任务写在前面任务的回调函数中。
如果是同步方法,那么任何异常都会立即抛出,可以使用try/catch
结构来处理异常。同步方法总是按顺序从上向下执行,是阻塞的。
//001 导入内置模块
var fs = require("fs");
//002 演示同步方法的执行
try {
//方法说明:追加数据到文件中,如果文件不存在那么就创建
fs.appendFileSync('./Hi.text', '文本数据');
console.log('Success Info:创建文件成功!');
} catch(err)
{
console.log('Error Info:',err);
}
//003 演示异步方法的使用
//方法说明:对文件执行重命名操作
fs.rename('./Hi.text', './Hello.text', function(error) {
if(error) throw error;
console.log("Success Info: 文件重命名成功!")
//方法说明:查看重命名后的文件信息
//依赖关系:需保证Hello.text文件已经存在
fs.stat('./Hello.text', function(err, stats){
if (err) throw err;
console.log(`File Info: \n ${JSON.stringify(stats,null,4)}`);
});
});
代码说明 上面给出了同步和异步方法使用的简单示例,代码中首先导入了fs模块,然后在当前目录中使用同步的方法(appendFileSync
)来创建Hi.text
文件并写入数据,随后调用异步方法(rename
)来对文件执行重命名操作,继而打印(stat
)该文件的信息。下面列出示例代码的执行细节。
wendingding$ node app.js
Success Info:创建文件成功!
Success Info: 文件重命名成功!
File Info:
{
"dev": 16777220,
"mode": 33188,
"nlink": 1,
"uid": 501,
"gid": 20,
"rdev": 0,
"blksize": 4194304,
"ino": 8601332359,
"size": 12,
"blocks": 8,
"atimeMs": 1543633694668.5117,
"mtimeMs": 1543633694669.2383,
"ctimeMs": 1543633694671.2622,
"birthtimeMs": 1543633694668.5117,
"atime": "2018-12-01T03:08:14.669Z",
"mtime": "2018-12-01T03:08:14.669Z",
"ctime": "2018-12-01T03:08:14.671Z",
"birthtime": "2018-12-01T03:08:14.669Z"
}
wendingding$ cat Hello.text
文本数据
二、核心方法
fs文件模块(File System)中提供的方法很多,在具体介绍之前,为方便阅读我先简单列出这些方法并对它们进行功能性的区分。
001 读取和写入文件
open() 打开文件
close() 关闭文件
readFile() 读取文件的完整内容
writeFile() 把完整内容写入文件
read() 读取文件中指定部分的内容
write() 写入指定部分的内容到文件
appendFile() 追加数据到文件,如果文件不存在那么就创建
002 操作文件目录
mkdir() 创建文件夹(目录)
rmdir() 删除文件夹(目录)
readdir() 读取文件夹(目录)
003 文件或目录的信息
//获取信息
stat() 查看文件或目录信息
fstat() 查询文件的信息(open方法打开文件后可用)
lstat() 查看文件或目录信息(查看符号连接文件信息 only)
exists() 检查文件或目录是否存在
realpath() 获取文件或目录的绝对路径
access() 检查指定目录或文件的用户权限
//修改信息
utimes() 修改文件的访问时间和修改时间
futimes() 修改文件的访问时间和修改时间(open方法打开文件后可用)
chmod() 修改文件或目录的读写权限
fchmod() 修改文件或目录的读写权限(open方法打开文件后可用)
rename() 修改文件的名称(重命名)
truncate() 截断文件
ftruncate() 截断文件(open方法打开文件后可用)
watch() 监视文件
watchFile() 监视文件
readFile 和 readFileSync
作用 异步(同步
)读取文件的内容。
语法 fs.readFile( path ,[ options ], callback ) | fs.readFileSync( path ,[ options ])
参数
- path (
string | Buffer | URL | integer类型
) 指定文件名或文件描述符。 - options (
Object | string类型
) 指定编码和处理文件系统的flag值
。 - callBack (
function类型
)执行完的回调函数(err, data
),其中data是文件的内容。
001 文件系统的flag
'a' 打开文件用于追加,如不存在则创建。
'ax' 类似 'a',但如果文件已存在则抛出异常。
'a+' 打开文件用于读取和追加,如不存在则创建。
'ax+' 类似 'a+',但如果文件已存在则抛出异常。
'as' 以同步模式打开文件用于追加,如不存在则创建。
'as+' 以同步模式打开文件用于读取和追加,如不存在则创建。
'r' 打开文件用于读取。如不存在则抛出异常。
'r+' 打开文件用于读取和写入。如不存在则抛出异常。
'rs+' 以同步模式打开文件用于读取和写入。指示操作系统绕开本地文件系统缓存(不建议使用)。
'w' 打开文件用于写入,不存在则创建,存在则截断。
'wx' 类似 'w',但如果文件已存在则抛出异常。
'w+' 打开文件用于读取和写入,不存在则创建,存在则截断。
'wx+' 类似 'w+',但如果文件已存在则抛出异常。
002 参数使用注意
options参数可以接收对象对象,如{"encoding":"utf8",flag:'r'};
options参数也可以接收字符串,如"utf8",表示读取文件使用utf编码模式。
默认情况下encoding的值为null,flag的值为r表示读取文件。
003 fs.readFile() 会缓存整个文件。 为了最小化内存占用,尽可能优先使用 fs.createReadStream()。
writeFile 和 writeFileSync
作用 异步(同步
)写入文件。
语法 fs.writeFile(file,data,[ options ],callback) | fs.writeFileSync(file,data,[ options])
参数
- file (
string | Buffer | URL | integer类型
) 指定完整路径的文件名或文件描述符。 - data (
string | Buffer | TypedArray | DataView类型
) 指定需要写入的内容。 - options (
Object | string类型
) 配置对象,可选项有encoding、mode和flag
。 - callBack (
function类型
)执行完的回调函数(err
),参数值为错误对象。
示例
//备注:readAndWrite.js文件内容
var fs = require("fs");
//001 读取文件内容(readFile)
fs.readFile("./Hello.text",function(error,data){
if(error) throw error;
console.log("001 第二个参数省略返回Buffer类型:\n",data);
})
fs.readFile("./Hello.text","utf8",function(error,data){
if(error) throw error;
console.log("002 第二个参数为字符编码:",data);
})
fs.readFile("./Hello.text",{"encoding":"utf8",flag:'r'},function(error,data){
if(error) throw error;
console.log("003 第二个参数为对象:",data);
})
//002 写入文件内容(writeFile)
var fullPath = "./Hi.text"
fs.writeFile(fullPath,"Beautiful",function(error){
if(error) throw error;
//读取指定文件的内容
var textContent = fs.readFileSync(fullPath,"utf8");
console.log(textContent);
})
//命令行执行和输出的结果为:
wendingding$ node readAndWrite.js
001 第二个参数省略返回Buffer类型:
<Buffer e6 96 87 e6 9c ac 3a 4e 69 63 65 20 74 6f 20 6d 65 65 74 20 75 20>
Beautiful
002 第二个参数为字符编码: 文本:Nice to meet u
003 第二个参数为对象: 文本:Nice to meet u
说明
001 方法说明
在写数据到文件时候,如果文件不存在,则创建文件,如果文件已存在,则覆盖文件。
如果 data 是一个 buffer,则忽略 encoding。
options参数可以是对象,也可以是字符串,如果该参数是一个字符串,则用来指定字符编码。
002 对同一个文件多次使用 fs.writeFile() 且不等待回调,是不安全的。
open 和 openSync
作用 异步(同步
)打开文件。
语法 fs.open( path, flags , [ mode ], callback ) | fs.openSync( path, flags , [ mode ])
参数
- path (
string | Buffer | URL类型
) 指定的文件或路径。 - flags (
integer类型
) 指定对文件的操作,具体取值参考文件系统的flag
值。 - mode (
integer类型
) 指定文件的模式,仅在创建时有效(默认可读可写)。 - callback (
Function类型
) 执行完毕的回调函数(err
,fd
)。
close 和 closeSync
作用 异步(同步
)关闭文件。
语法 fs.close( fd, callback ) | fs.closeSync( fd )
参数
- fd (
integer类型
) 指定的文件描述符。 - callback (
Function类型
) 执行完毕的回调函数(err
,fd
),参数值为错误对象。
read 和 readSync write 和 writeSync
语法
//同步 | 异步读取文件的内容。
fs.readSync(fd, buffer, offset, length, position)
fs.read(fd, buffer, offset, length, position, callback)
//同步 | 异步写入数据到文件中。
fs.writeSync(fd, buffer, offset, length, position)
fs.write(fd, buffer, offset, length, position, callback)
参数
- fd (
integer类型
) 通常为open方法回调中返回的文件描述符。 - buffer (
Buffer | TypedArray | DataView类型
) 指定将文件数据读取到哪个缓存区。 - offset (
integer类型
) 写入数据的开始位置(字节单位)。 - length (
integer类型
) 指定从文件读取的字节数。 - position (
integer类型
) 指定读取文件时的开始位置。 - callback (
Function类型
) 回调函数(err
,bytes(Read | Written)
,buffer
)。
示例
//备注:openAndClose.js 文件的内容
//备注:在当前目录中先准备好Hi.text文件,内容为Nice !
var fs = require("fs");
var fullPath = "./Hi.text";
var bufferWrite = new Buffer(",请保持微笑 >.<");
var bufferRead = new Buffer(30);
console.log("000 打印文件的内容:",fs.readFileSync(fullPath,"utf8"));
//001 打开文件
//语法:fs.open( path, flags , [ mode ], callback )
//参数:r+表示读取和写入文件,文件不存在则抛出异常
fs.open(fullPath,"r+",function(error,fd){
if(error) throw error;
console.log("001 打开文件成功!")
//002 写入文件
//语法:fs.write(fd, buffer, offset, length, position, callback)
fs.write(fd,bufferWrite,0,bufferWrite.length,5,function(err,writtenBytes,bufferData){
if(err) throw err;
console.log("002 写入的数据大小:",writtenBytes);
console.log("002 写入的Buffer数据:",bufferData);
console.log("002 写入的Buffer数据字符串:",bufferData.toString());
//003 读取文件内容
//fs.read(fd, buffer, offset, length, position, callback)
fs.read(fd,bufferRead,0,bufferRead.length,0,function(err,readBytes,bufferData){
if(err) throw err;
console.log("003 读取的数据大小:",readBytes);
console.log("003 读取的Buffer数据:",bufferData);
console.log("003 读取的Buffer数据字符串:",bufferData.toString());
//004 关闭文件
fs.close(fd,function(err){
if(err) throw err;
console.log("004 关闭文件成功!");
})
});
})
})
//命令行执行细节:
wendingding$ node openAndClose.js
000 打印文件的内容: Nice !
001 打开文件成功!
002 写入的数据大小: 20
002 写入的Buffer数据:
<Buffer 2c e8 af b7 e4 bf 9d e6 8c 81 e5 be ae e7 ac 91 20 3e 2e 3c>
002 写入的Buffer数据字符串: ,请保持微笑 >.<
003 读取的数据大小: 25
003 读取的Buffer数据:
<Buffer 4e 69 63 65 20 2c e8 af b7 e4 bf 9d e6 8c 81 e5 be ae e7 ac 91 20 3e 2e 3c ···00>
003 读取的Buffer数据字符串: Nice ,请保持微笑 >.<
004 关闭文件成功!
appendFile 和 appendFileSync
作用 异步(同步
)追加数据到指定文件,如果文件不存在那么就先创建。
语法
fs.appendFileSync(path, data, [options])
fs.appendFile(path, data, [options], callback)
参数
- path (
string | Buffer | URL类型
) 指定的文件或路径。 - data (
string | Buffer类型
) 追加的具体数据。 - options (
Object | string类型
) 配置encoding、flag和mode
等字段。 - callBack (
function类型
)执行完的回调函数(err
),参数值为错误对象。
示例
var fs = require("fs");
var filePath = "./Nice.text";
//001 同步追加数据到指定的文件(文件不存在)
try{
//语法:fs.appendFileSync(path, data, [options])
fs.appendFileSync(filePath,"妙:Nice!",{encoding:"utf8"});
console.log('创建文件,并追加数据到文件');
}catch(err)
{
console.log("Error Info:",err);
}
//002 异步方法追加数据
fs.appendFile(filePath," Best","utf8",function(err){
if(err) throw err;
console.log("Success Info: 追加数据成功!");
//003 读取文件的内容验证
var resultData = fs.readFileSync(filePath,"utf8");
console.log("Success resultData:",resultData);
})
//命令行执行细节
wendingding$ node appendFile.js
创建文件,并追加数据到文件
Success Info: 追加数据成功!
Success resultData: 妙:Nice! Best
wendingding$ cat Nice.text
妙:Nice! Best
② 目录操作
mkdir 和 mkdirSync
作用 异步(同步
)创建文件夹(目录)。
语法 fs.mkdir( path , [ options ], callback ) | fs.mkdirSync( path , [ options ] )
参数
- path (
string | Buffer | URL类型
) 指定的文件或路径。 - options (
Object | integer类型
) 配置选项有recursive
(是否创建父目录 10+)和mode
。 - callBack (
function类型
)执行完的回调函数(err
),参数值为错误对象。
readdir 和 readSync
作用 异步(同步
)读取文件夹(目录)。
语法 fs.readdir( path , [ options ] , callback ) | fs.readdirSync( path , [ options ] )
参数
- path (
string | Buffer | URL类型
) 指定的文件或路径。 - options (
Object | integer类型
) 配置选项有encoding
和withFileTypes
。 - callBack (
function类型
)执行完的回调函数(err
,files
),表示错误对象和目录数组。
Options配置项说明
[1]字符串作为参数,用于指定字符编码。
[2]对象类型作为参数
encoding字段设置字符编码,默认为utf8 , 如果 encoding 设为 'buffer',则返回的文件名是 Buffer。
withFileTypes字段设置回调函数files数组的元素结构,设置为true则数组的元素是fs.Dirent,默认为false。
rmdir 和 rmdirSync
作用 异步(同步
)移除文件夹(目录)。
语法 fs.rmdir( path , callback ) | fs.rmdirSync( path )
参数
- path (
string | Buffer | URL类型
) 指定的文件或路径。 - callback (
function类型
)执行完的回调函数(err
),表示错误对象。
示例
//备注:file.js文件内容
var fs = require("fs");
//001 创建文件目录
fs.mkdir("./test",function(error){
if(error) throw error;
console.log("Success Info: ","创建目录成功")
//002 读取目录
fs.readdir("./nodefs",function(error,files){
if(error) throw error;
console.log("Success Info: ","读取目录成功")
console.log("列出具体的内容:\n ",files);
//003 删除目录
// fs.rmdir("./test",function(){
// if(error) throw error;
// console.log("Success Info: ","删除test目录成功")
// })
//003 删除目录(遍历删除nodefs下面所有的子目录)
files.forEach(element => {
var fullPath = "./nodefs/" + element;
console.log(fullPath);
fs.rmdir(fullPath,function(){
if(error) throw error;
console.log("Success Info: ","删除"+fullPath+"目录成功")
})
});
})
})
//命令行执行和输出的结果为:
wendingding$ node file.js
Success Info: 创建目录成功
Success Info: 读取目录成功
列出具体的内容:
[ '.DS_Store', 'a', 'b' ]
./nodefs/.DS_Store
./nodefs/a
./nodefs/b
Success Info: 删除./nodefs/.DS_Store目录成功
Success Info: 删除./nodefs/a目录成功
Success Info: 删除./nodefs/b目录成功
access 和 accessSync
作用 异步(同步
)检查指定文件或目录的用户权限。
语法 fs.access( path, [ mode ], callback ) | fs.accessSync( path , [ mode ])
参数
- path (
string | Buffer | URL类型
) 指定的文件或路径。 - callBack (
function类型
)执行检查完成的回调函数,如果失败则唯一的error参数有值。 - mode (
integer类型
) 默认值为fs.constants.F_OK
要执行的可访问性检查。
001 文件的可访问性常量
F_OK 文件可见 == 0
R_OK 文件可读 == 4
W_OK 文件可写 == 2
X_OK 文件可执行(在 Windows上无效,效果同 fs.constants.F_OK) == 1
002 使用建议
不建议在调用 fs.open()、fs.readFile() 或 fs.writeFile() 之前使用 fs.access() 检查文件的可访问性。
因为其他进程可能在两个调用的间隙改变文件的状态。 应该直接打开、读取或写入文件,当文件无法访问时再处理错误。
stat 和 statSync
作用 异步(同步
)查看文件的属性。
语法 fs.stat( path ,[ options ], callback) | fs.statSync( path )
参数
- path (
string | Buffer | URL类型
) 指定的文件或路径。 - options (
对象类型
)配置项bigint(布尔类型值)控制数值是否为 bigint 型。 - callback (
function类型
)回调函数(err
,stats
),stats
保存文件信息对象。
示例
//备注:test.js 文件内容
var fs = require("fs");
//001 stat方法说明:查看文件的属性
//不建议在调用 fs.open()、fs.readFile() 或 fs.writeFile() 之前使用 fs.stat() 检查文件是否存在。
//应该直接打开、读取或写入文件,当文件无效时再处理错误
fs.stat("./app.js", function(err,Info){
console.log("Success Info:",Info);
//查看是否为文件
console.log(Info.isFile());
})
//002 statSync方法说明:查看目录(文件夹)属性
try{
var fileInfo = fs.statSync("./nodefs");
console.log("Success Info:",fileInfo);
}catch(err)
{
console.log("Error Info: ",err);
}
//命令行执行和输出的结果为:
wendingding$ node test.js
Success Info: Stats {
dev: 16777220,
mode: 16877,
nlink: 4,
uid: 501,
gid: 20,
rdev: 0,
blksize: 4194304,
ino: 8601434025,
size: 128,
blocks: 0,
atimeMs: 1543821747020.0398,
mtimeMs: 1543821696833.2778,
ctimeMs: 1543821701216.544,
birthtimeMs: 1543821692999.7283,
atime: 2018-12-03T07:22:27.020Z,
mtime: 2018-12-03T07:21:36.833Z,
ctime: 2018-12-03T07:21:41.217Z,
birthtime: 2018-12-03T07:21:33.000Z }
true
Success Info: Stats {
dev: 16777220,
mode: 33188,
nlink: 1,
uid: 501,
gid: 20,
rdev: 0,
blksize: 4194304,
ino: 8601330263,
size: 839,
blocks: 8,
atimeMs: 1543821852077.4976,
mtimeMs: 1543633822104.2488,
ctimeMs: 1543633822104.2488,
birthtimeMs: 1543632135491.0122,
atime: 2018-12-03T07:24:12.077Z,
mtime: 2018-12-01T03:10:22.104Z,
ctime: 2018-12-01T03:10:22.104Z,
birthtime: 2018-12-01T02:42:15.491Z }
bogon:fs wendingding$
在上面代码中异步方法回调函数中的Info
和同步方法的返回值fileInfo
都是fs.Stats
类型对象。
fs.Stats
对象核心成员
mode 当前文件的权限标识。
nlink 当前文件的硬链接数量。
size 当前文件的大小(字节数)。
atime 当前文件的访问时间。
mtime 当前文件的修改时间。
ctime 最后改变文件状态的时间。
birthtime 创建文件的时间。
isFile() 是否是一个文件。
isDirectory() 是否是一个目录。
isSymbolicLink() 是否是符号链接文件。
fstat 和 fstatSync
作用 异步(同步
)查看文件的属性。
语法 fs.fstat(fd ,[ options ], callback) | fs.fstatSync(fd ,[ options ])
参数
- fd (
integer类型
) 使用open方法打开后返回的文件描述符。 - options (
对象类型
)配置项bigint(布尔类型值)控制数值是否为长整型。 - callback (
function类型
)回调函数(err
,stats
),stats
保存文件信息对象。
realpath 和 realpathSync
作用 异步(同步
)计算文件路径,解析 .、.. 与符号链接。
语法 fs.realpath(path ,[ options ], callback) | fs.realpathSync(path ,[ options ])
参数
- path (
string | Buffer | URL类型
) 指定的文件或路径。 - options (
对象类型
)配置项encoding设置字符编码(默认为utf8
)。 - callback (
function类型
)回调函数(err
,resolvedPath
),resolvedPath
保存完整路径。
示例
//备注:fileInfo.js文件的内容
var fs = require("fs");
var fullPath = "./Hi.text";
//001 打开文件
fs.open(fullPath,"r",function(err,fd){
if(err) throw err;
console.log("Success Info: 打开文件成功!");
//002 查看文件信息
//语法:fs.fstat(fd ,[ options ], callback)
fs.fstat(fd,function(err,fileInfo){
if(err) throw err;
console.log("Success fileInfo:",fileInfo);
//003 打印文件的完整路径
fs.realpath(fullPath,function(err,resultPath){
if(err) throw err;
console.log("Successs Info => ",resultPath);
fs.close(fd,function(err){
if(err) throw err;
console.log("Success Info: 关闭文件成功!");
})
})
})
})
//命令行执行细节
wendingding$ node fileInfo.js
Success Info: 打开文件成功!
Success fileInfo: Stats {
dev: 16777220,
mode: 33188,
nlink: 1,
uid: 501,
gid: 20,
rdev: 0,
blksize: 4194304,
ino: 8601453682,
size: 25,
blocks: 8,
atimeMs: 1543894023563.2808,
mtimeMs: 1543894022418.2258,
ctimeMs: 1543894022418.2258,
birthtimeMs: 1543633825190.9485,
atime: 2018-12-04T03:27:03.563Z,
mtime: 2018-12-04T03:27:02.418Z,
ctime: 2018-12-04T03:27:02.418Z,
birthtime: 2018-12-01T03:10:25.191Z }
Successs Info => /Users/文顶顶/Desktop/fs/Hi.text
Success Info: 关闭文件成功
rename 和 renameSync
作用 异步(同步
)对文件进行重命名操作。
语法 fs.rename( oldPath, newPath, callback ) | fs.renameSync( oldPath, newPath )
参数
- oldPath (
string | Buffer | URL类型
)原来的文件全路径。 - newPath (
string | Buffer | URL类型
)目标文件全路径名称。 - callback (
function类型
)回调函数(err
),若文件已存在则覆盖。
示例
//备注:rename.js文件的内容
var fs = require("fs");
var oldPath = "./Hi.text";
var newPath = "./newHi.text";
//001 执行重命名操作
fs.rename(oldPath,newPath,function(err){
if(err) throw err;
console.log("Success Info:文件重命名成功!");
//002 读取文件的内容
fs.readFile(newPath,"utf8",function(err,fileData){
if(err) throw err;
console.log("Success fileData:",fileData);
})
})
//命令行执行细节
wendingding$ node rename.js
Success Info:文件重命名成功!
Success fileData: Nice ,请保持微笑 >.<
前端开发系列084-Node篇之fs的更多相关文章
- openlayers5-webpack 入门开发系列一初探篇(附源码下载)
前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...
- leaflet-webpack 入门开发系列一初探篇(附源码下载)
前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...
- 【Windows10 IoT开发系列】配置篇
原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry ...
- 旨在脱离后端环境的前端开发套件 - IDT Server篇
IDT,一个基于Nodejs的,旨在脱离后端环境的前端开发套件,目的就是能让前端开发完全脱离后端的环境,无论后端是什么模板引擎(主流),都能应付自如. IDT主要包括两大部分:Server + Bui ...
- cesium-webpack 入门开发系列一初探篇(附源码下载)
前言 cesium-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 we ...
- 前端开发【第2篇:CSS】
鸡血 样式的属性多达几千个,但别担心,按照80-20原则,常用的也就几十个,你完全可以掌握它. Css初识 HTML的诞生 早期只有HTML的时候为了让HTML更美观一点,当时页面的开发者会把颜色写到 ...
- [置顶]【实用 .NET Core开发系列】- 导航篇
前言 此系列从出发点来看,是 上个系列的续篇, 上个系列因为后面工作的原因,后面几篇没有写完,后来.NET Core出来之后,注意力就转移到了.NET Core上,所以再也就没有继续下去,此是原因之一 ...
- openlayers4 入门开发系列之风场图篇
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- openlayers4 入门开发系列之热力图篇(附源码下载)
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- Android Metro风格的Launcher开发系列第三篇
前言: 各位小伙伴,又到了每周更新文章了时候了,本来是周日能发出来呢,这不是赶上清明节吗,女王大人发话了,清明节前两天半陪她玩,只留给我周一下午半天时间写博客,哪里有女王哪里就有压迫呀有木有!好了闲话 ...
随机推荐
- Jenkins持续集成 docker、gitlab、sonar
Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台.这是一个免费的源代码,可以处理任何类型的构建或持续集成.集成Jenkins可以用于一些测试和部署技术.Jenki ...
- Robot Framework使用循环
1.普通的For循环 在一个普通的For循环中,循环开始的关键字是 :FOR ,其中的:用于与一般关键字做区分,对于循环结 构体内的每一行,使用 \ 作为改行的行首关键字.对于循环中的变量,可以在 I ...
- 康谋分享 | aiSim5基于生成式AI扩大仿真测试范围(终)
在前面的几章节中探讨了aiSim仿真合成数据的置信度,此外在场景重建和测试流程闭环的过程中,难免会面临3D场景制作重建耗时长.成本高.扩展性低以及交通状况复杂程度难以满意等问题,当前的主要挑战在于如何 ...
- kette介绍-Step之Merge Join
Merge Join介绍 需要配合Sort rows使用,对关联字段进行排序 关联两个step数据,可以是两个不同的数据库表数据,也可以是一张表,一个文件,输出字段为两张表所有字段 注意将小数据集作为 ...
- C# 线程基础——用户模式、内核模式
C# 线程基础--用户模式.内核模式 参照:用户模式和内核模式 - Windows drivers | Microsoft Docs 基础概念 运行 Windows 的计算机中的处理器有两个不同模式: ...
- 79.8K star!这款开源自动化神器让技术团队效率飙升,400+集成玩转AI工作流!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 "n8n 是技术团队自动化领域的瑞士军刀,既能享受可视化搭建的便捷,又能随时插入代 ...
- SpringBoot3特性——错误信息Problemdetails
Spring Framework 6 实现了 HTTP API 规范 RFC 7807 的问题详细信息. 在本文中,我们将学习如何在 SpringBoot 3 REST API(使用 Spring F ...
- Python基础 - 多线程(下)
上篇对多线程有一个初步的认识, 常用的要点, 也是对照这 多进程 来试验的. 目的呢, 还是再不断地提醒自己能通俗理解进程和线程的"关系", OS -> 多进程 -> ...
- 思科安全大模型SOC作业应用分析
思科与Meta联合推出的 Foundation-sec-8B 大模型及 AI Defenders工具包,标志着AI技术在网络安全领域的深度融合与创新突破.两者的协同不仅重构了传统安全运营模式,更开创了 ...
- C#实现MergeSort算法
public class MergeSortLearn { /// <summary> /// 分治递归 /// </summary> /// <param name=& ...