代码仓库更新在:github

fs模块

attention:js的相对路径都是相对当前运行环境的工作目录,而不是相对该js文件的目录

引入

const fs = require('fs');

写入

异步写入:定义:写入操作执行时同时进行后面语句的执行,效率高

同步写入:定义:写入操作执行时等待写入操作执行完再执行后面语句,效率低

异步写入example:

fs.writeFile('./hello.txt', 'Hello from Node.js!',err => {
// err write wrong;
if(err){
console.log('error with writing file');
return;
}
console.log('file written successfully');
});

同步写入:将writeFile改为writeFileSync

追加

  1. 方式一:appendFile
  2. 方式二:在writeFile的形式参数中加上{fag:’a’}

for example:

const fs = require('fs');
fs.writeFile('./hello.txt', 'Hello from Node.js!',{flag:'a'},err => {
// err write wrong;
if(err){
console.log('error with writing file');
return;
}
console.log('file written successfully');
});
fs.appendFile('./hello.txt', '\r\nhello', err => {
if(err){
console.log('error with writing file');
return;
}
console.log('file written successfully');
})

流式写入

创建对象

const ws = fs.createWritestream()

写入

ws.write()

结束

ws.end()或ws.close()

可以不加结束语句

特点

流失写入方式适合大文件或频繁操作文件,通过减少打开文件的次数来提高速度

读取

readfile()

  1. 路径
  2. 参数(可选)
  3. 回调函数(error 和 data)

回调的data是buffer,需要通过tostring方法将其转换为string格式便于阅读

readflieSync()是同步读取方法

流式读取

createReadStream,作用:提高读取效率

const fs = require('fs');
const rs = fs.createReadStream('hello.txt');
rs.on('data',chunk => {
console.log('Data: ',chunk.toString());
})

每次读取65536bit,64kb

end可选事件

rs.on('end',() => {
console.log('Read stream finished');
})

个人理解流式写入和读取都是在fs模块的基础上新建对象,然后读取需要绑定事件,写入直接调用方法;

然而直接写入写出可以直接用fs模块新建对象,然后调用方法进行写入写出

但是直接写入写出是将文件全部内容先读出再全部写入,相比之下,流式读取写入则是一边读取一边写入,节约了内存占用

重命名和移动

rename方法,参数包括原路径,末路径,回调函数

所谓的重命名和移动就是更改源文件的路径,本质相同

同步的方法就是加上Sync

for example

// rename
fs.rename('hello.txt', 'rename.txt', err=>{
if(err){
console.log('rename failed');
}
else{
console.log('rename successful');
}
})
// move
fs.rename('rename.txt','rename/rename.txt',error =>{
if(error){
console.log('move failed');
}
else{
console.log('move successful');
}
})

删除

unlink和rm两种方法,参数为文件路径和回调函数

同步就是加上Sync

for example

fs.unlink('hellw2.txt', err => {
if(err){
console.log('delete failed');
}
else{
console.log('delete sussessful');
}
})
fs.rm('hellw2.txt', err => {
if(err){
console.log('delete failed');
}
else{
console.log('delete sussessful');
}
})

创建文件(夹)

mkdir方法,传参:目标directory路径,回调函数

fs.mkdir('test', err => {
if(err){
console.log('create failed');
}
else{
console.log('create successful');
}
}
)

查看文件夹file

readdir方法,传参:目标directory路径,回调函数

fs.readdir('test', (err, files) => {
if(err){
console.log('read failed');
}
else{
console.log('read successful');
console.log(files);
}
})

删除文件夹

rm方法,传参:目标文件路径、回调函数

注:rmdir方法将要被移除

查看文件状态

stat方法,传参:目标文件路径、回调函数

for example

fs.stat('read.js', (err, stats) => {
if(err){
console.log('status failed');
}
else{
console.log('status successful');
console.log(stats);
}
})

stat输出如下:

Stats {
dev: 1084496056,
mode: 33206,
nlink: 1,
uid: 0,
gid: 0,
rdev: 0,
blksize: 4096,
ino: 562949953449871,
size: 212,
blocks: 0,
atimeMs: 1726888786803.9666,
mtimeMs: 1726888783851.079,
ctimeMs: 1726888783851.079,
birthtimeMs: 1726843900323.625,
atime: 2024-09-21T03:19:46.804Z,
mtime: 2024-09-21T03:19:43.851Z,
ctime: 2024-09-21T03:19:43.851Z,
birthtime: 2024-09-20T14:51:40.324Z
}

birthtime:文件创建时间

mtime:最后一次修改时间

ctime:最后一次更新状态时间

atime:最后一次访问时间

按照时间先后排序:b早于m早于c早于a