Node.js中的常用核心模块——FS模块

fs(File System) 模块可用于与文件系统进行交互,所有的文件系统操作都具有同步的、异步的形式。

  1. 同步的形式会阻塞 Node.js 事件循环和进一步的 JavaScript 执行,直到操作完成。 异常会被立即地抛出,可以使用 try…catch 处理。
  2. 异步的形式总是把完成回调作为其最后一个参数。传给完成回调的参数取决于具体方法,但第一个参数总是预留给异常。如果操作被成功地完成,则第一个参数会为 null或 undefined。

在 fs 模块中,所有的方法都分为同步和异步两种实现,具有 sync 后缀的方法为同步方法,不具有 sync 后缀的方法为异步方法。在实际开发中建议大家使用异步的形式,异步的形式性能更高,熟读更快,而且没有阻塞。

官方中文手册 : http://nodejs.cn/api/fs.html

文件基本操作

//1.加载fs模块
const fs = require('fs');
/*
2.向文件中写入内容
  fs.writeFile(file, data[, options], callback) 异步地将数据写入到一个文件,如果文件已存在则覆盖该文件。
   file:写入文件的路径
   data:写入文件的内容,可以是字符串或 buffer
   options:可选,该参数是个对象或字符串,包含{encoding,mode,flag};
       encoding文件的字符编码, 默认值: 'utf8'
       mode设置文件模式,默认值: 0o666
       flag 文件系统标志,默认值: 'w'
   callback:回调函数,回调会传入一个参数 (err),err是异常
 */
fs.writeFile('E:/a.txt','Node.js',(err)=>{
    //判断是否出现错误
    if(err){
         console.log('向文件中写入内容失败');
    }
 });
/*
3.向文件中追加内容
  fs.appendFile(path, data[, options], callback) 异步地追加数据到文件,如果文件尚不存在则创建文件。
    file:写入文件的路径
    data:写入文件的内容,可以是字符串或 buffer
    options:可选,该参数是个对象或字符串,包含{encoding,mode,flag}
       encoding文件的字符编码, 默认值: 'utf8'
       mode设置文件模式,默认值: 0o666
       flag 文件系统标志,默认值: 'w'
    callback:回调函数,
*/
fs.appendFile('E:/a.txt','技术','utf8',(err)=>{
    if(err){
        console.log('向文件中追加内容失败');
    }
});
/**
4.从文件中读取内容
  readFile(path[, options], callback) 异步地读取文件的全部内容。
   path:要读取的文件路径
   options:可选,该参数是个对象,包含{encoding,mode,flag};
       encoding 默认值: null
       flag 默认值: 'r'
   callback:回调函数,回调会传入两个参数 (err, data),其中 data 是文件的内容。如果没有指定字符编码,则返回原始的 buffer。
 */
fs.readFile('E:/a.txt',(err,data)=>{
    //判断是否出现错误
    if(err){
        //出现错误,回调函数的中代码就不要继续往后执行,所以使用return的方式,组织代码继续执行
        return console.log("从文件中读取内容失败");
    }
    //通过调用toString()方法将二进制数据转换为字符
    console.log(data.toString());
});

执行结果:
在这里插入图片描述

文件拷贝

/*
文件拷贝
 */
//1.加载fs模块
const fs = require('fs');
/**
 * fs.copyFile(src, dest[, mode], callback)异步地文件拷贝,默认情况下,如果目标文件名已经存在,则覆盖它。
 * src  要拷贝的源文件名。
 * dest 拷贝操作的目标文件名。
 * mode 用于拷贝操作的修饰符。默认值: 0。可选的整数,指定拷贝操作的行为。
 * callback 回调函数。
 */
fs.copyFile('e:/a.txt','e:/b.txt',(err)=>{
    if(err){
        return console.log('文件拷贝失败')
    }
    console.log('文件拷贝中...');
    console.log('文件拷贝成功');
});

执行结果:
在这里插入图片描述
修改代码:

/**
 * 拷贝操作的修饰符
 *  fs.constants.COPYFILE_EXCL - 如果目标文件名已存在,则拷贝操作将失败。
 */
fs.copyFile('e:/a.txt','e:/b.txt',fs.constants.COPYFILE_EXCL,(err)=>{
    if(err){
        return console.log('文件拷贝失败')
    }
    console.log('文件拷贝中...');
    console.log('文件拷贝成功');
});

在这里插入图片描述

获取文件属性

//fs.Stats 类
//fs.Stats 对象提供了关于文件的属性。
//加载fs模块
const fs = require('fs');
/*
    stat(path[, options], callback)异步返回Stats类
    path:文件的路径
    callback:回调函数,回调有两个参数 (err, stats),其中 stats 是 fs.Stats 对象。
*/
fs.stat('e:/a.txt',(err,stats)=>{
    if(err){
        return console.log(`获取文件信息失败`);
    }
    console.log(`是否是文件:${stats.isFile()}`);
    console.log(`是否是目录:${stats.isDirectory()}`);
    console.log(`上次访问此文件的时间戳 ${stats.atime}`);
})

执行结果:
Node.js中的常用核心模块——FS模块_第1张图片

文件夹操作

创建文件夹

const fs = require('fs');
//创建文件夹
/**
 * mkdir(path[, options], callback)
 * path:要创建的文件路径
 * option:可选,包括
 *    recursive属性:表示是否创建父目录,默认为false
 *    mode属性:表示权限和粘滞位 在Windows上不支持,默认值为0o777。
 * callback:回调函数
 */
//注意:当 path 是已存在的目录时,调用 fs.mkdir() 仅在recursive为false 时才会导致错误。  
fs.mkdir('e:/test',(err)=>{
    if(err){
        return console.log('e:/test文件创建失败');
    }
    console.log('e:/test文件创建成功');
});
//recursive属性为false时,不会创建父目录;为true时,会创建父目录。
fs.mkdir('e:/test1/test',{recursive:true},(err)=>{
    if(err){
        return console.log('e:/test1/test文件创建失败');
    }
    console.log('e:/test1/test文件创建成功');
});

执行结果:
Node.js中的常用核心模块——FS模块_第2张图片
读取目录

//读取目录的内容
fs.readdir('C:/Users/Administrator/Desktop/code/chapter4/',(err,files)=>{
    if(err){
        console.log("读取目录失败");
    }
    files.map(file=>{
        console.log(file);
    })
});

执行结果:
在这里插入图片描述
重命名文件或文件夹

//重命名文件夹
fs.rename('e:/test1','e:/tests',(err)=>{
    if(err){
        console.log("重命名失败");
        return;
    }
    console.log("重命名成功!");
});
//重命名文件
fs.rename('e:/b.txt','e:/c.txt',(err)=>{
    if(err){
        console.log("重命名失败");
        return;
    }
    console.log("重命名成功!");
});

执行结果:
在这里插入图片描述
删除文件夹

const fs = require('fs');

//删除文件夹
/**
 * fs.rmdir(path[, options], callback)删除文件夹时,要求该文件夹必须为空
 *  options 对象类型,可选
 *      maxRetries 当recursive为true时,遇到错误的时,重试的次数。默认为0
 *      recursive 是否执行递归目录删除,默认为false
 *      retryDelay 当recursive为true时,重试之间等待的时间(以毫秒为单位),默认为100
 */
fs.rmdir('e:/test',(err)=>{
    if(err){
        console.log('删除e:/test文件夹失败');
        return;
    }
    console.log('删除e:/test文件夹成功');
});

fs.rmdir('e:/tests',(err)=>{
    if(err){
        console.log('删除e:/tests文件夹失败');
        return;
    }
    console.log('删除e:/tests文件夹成功');
});

执行结果:

在这里插入图片描述
所以当我们删除一个文件夹时,需要先读取文件夹和删除文件。这样来删除一个文件夹就相对复杂。在这种情况下,最好安装 fs-extra 模块,该模块非常受欢迎且维护良好。 它是 fs 模块的直接替代品,在其之上提供了更多的功能。

  1. 本地安装fs-extra 模块
    cnpm install fs-extra
    在这里插入图片描述
  2. 使用fs-extra 模块的remove()方法删除文件夹
//加载第三方模块
const fs = require('fs-extra');
//删除文件夹
fs.remove('e:/tests',(err)=>{
    if(err){
        console.log('删除e:/tests文件夹失败');
        return;
    }
    console.log('删除e:/tests文件夹成功');
});

执行结果:
在这里插入图片描述

欢迎大家阅读,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位指点,在此表示感激不尽。文章持续更新中…

你可能感兴趣的:(Node.js,node.js)