fs模块
导入模块
const fs= require('fs');
写入文件
fs.writeFile('./座右铭.txt', '三人行,必有我师焉', err => {
同步写入文件
fs.writeFileSync('./座右铭.txt', 'test');//同步写入文件,性能较差,顺序执行
###//调用方法appendFile,写入文件
fs.appendFile('./座右铭.txt', '\n学而时习之,不亦说乎', err => {
if (err) {
console.log('写入文件失败', err);
return;
}
console.log('写入文件成功');
});
console.log('程序执行结束');
异步读取
fs.readFile('./观书有感.txt',(err,data)=>{
if(err){
console.log('读取文件失败');
return;
}
console.log('读取文件成功-----');
console.log(data.toString());
});
同步读取
const data = fs.readFileSync('./观书有感.txt');
console.log('同步读取文件成功-----');
console.log(data.toString());
文件流式读取,适合大文件的读取,每次读取文件的一部分内容,直到读取完成
const fs = require('fs');
const rs = fs.createReadStream('1.mp3');
rs.on('data', chunk=>{
console.log(chunk.length);//65536字节,64kb
});
rs.on('end',()=>{
console.log('读取完成');
});
rs.on('error', err=>{
console.log('读取文件失败', err);
});
console.log('程序执行结束');
文件复制
读取一个文件的全部内容,然后写入到另一个文件中去,适合小文件的复制,
const fs = require('fs');
const process = require('process');
let data = fs.readFileSync('1.mp3');
fs.writeFileSync('1-复制.mp3',data);
console.log(process.memoryUsage()); 35.9921875
console.log('文件复制完成');
大文件不适合这种方式复制,大文件复制,适合使用流的方式复制, 流的方式复制大文件
const rs = fs.createReadStream('1.mp3');
const ws = fs.createWriteStream('1-复制-流.mp3');
rs.on('data', chunk=>{
ws.write(chunk);
});
rs.on('end',()=>{
console.log(process.memoryUsage()); //38.8203125
});
rs.pipe(ws); //管道流的方式复制文件
rs.on('end',()=>{
console.log(process.memoryUsage()); //8.9140625
});
文件夹重命名
const fs=require('fs');
fs.rename('1-复-流.mp3','1-重命名.mp3',err=>{
if(err){
console.log('文件重命名失败');
return;
}
console.log('文件重命名成功');
}
);
移动文件
fs.rename('1-重命名.mp3','./资料/1.mp3',err=>{
if(err){
console.log('文件移动失败');
return;
}
console.log('文件移动成功');
}
);
文件删除
const fs =require('fs');
fs.unlink('1-复制.mp3', (err) => {
if (err) {
console.error('失败:', err);
} else {
console.log('文件删除成功');
}
});
fs.rmdir('test', (err) => {
if (err) {
console.error('失败:', err);
} else {
console.log('目录删除成功');
}
});
fs.rmSync('test', { recursive: true, force: true });
console.log('目录删除成功');
新建文件夹:
const fs= require('fs');
fs.mkdir('test', (err) => {
if (err) {
console.log('创建文件夹失败');
} else {
console.log('创建文件夹成功');
}
});
同步新建文件夹:
fs.mkdirSync('9-新建文件夹-同步');
console.log('同步创建文件夹成功');
#### 递归新建文件夹:
fs.mkdir('test/a/b/c',{recursive:true}, (err) => {
if (err) {
console.log('创建文件夹失败');
} else {
console.log('创建文件夹成功');
}
});
#### 流失写入文件:write方法,适合写入频次较多的场景,建立通道,直到写入完成后关闭通道。,也适合大文件的写入
const ws = fs.createWriteStream('./test/a/b/c/观书有感.txt');
ws.write('半亩方塘一鉴开,\n');
ws.write('天光云影共徘徊。\n');
ws.write('问渠那得清如许?\n');
ws.write('为有源头活水来。\n');
//关闭写入流
ws.on('finish',()=>{
console.log('写入完成');
});
ws.on('error', err=>{
console.log('写入失败', err);
});
ws.close();
console.log('程序执行结束');
查看文件状态
const fs=require('fs');
fs.stat('test/b/c/观书有感.txt',(err,stats)=>{
if(err){
console.log('获取状态失败',err);
}else{
console.log('获取状态成功');
console.log('最后修改时间:',stats);
// console.log('是否是文件',stats.isFile());
// console.log('是否是文件夹',stats.isDirectory());
// console.log('文件大小',stats.size);
// console.log('创建时间',stats.birthtime);
// console.log('最后修改时间',stats.mtime);
}
});