学习笔记

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);  
    }    
});

Licensed under CC BY-NC-SA 4.0
热爱生活 学无止境
使用 Hugo 构建
主题 StackJimmy 设计