Node核心API的fs模块学习(二)

2020-08-121776次阅读node

在webpack配置中经常会碰到path、fs等API使用,之前总结过path模块,现在总结一下fs模块mkdir或mkdirSync方法创建目录、readdir或readdirSync方法读取目录、exists或existSync方法检查一个文件或目录是否存在、realpath或realpathSync方法获取一个文件或目录的绝对路径、chmod或chmodSync方法修改文件或目录的读写权限、stat方法查看文件信息、rename或renameSync方法移动文件或目录、truncate或truncateSync方法对文件进行截断操作、ftruncate或ftruncateSync方法截断文件、rmdir或rmdirSync方法删除空目录。

创建与读取目录

在fs模块中,可以使用mkdir或mkdirSync方法创建目录。

fs.mkdir(path,[mode],callback);
  • path参数用于指定需要被创建的目录的完整路径及目录名;
  • mode参数值用于指定该目录的权限,默认值为0777(表示任何人可读写该目录);
  • callback参数用于指定创建目录操作完毕时调用的回调函数,该回调函数中使用一个参数,参数值为创建目录操作失败时触发的错误对象。
var fs = require('fs');
fs.mkdir('./test',function(err){
    if(err) {
        console.log("创建目录操作失败");
    }else {
        console.log("创建目录操作成功");
    }
});

在fs模块中,可以使用readdir或readdirSync方法读取目录。

fs.readdir(path,callback);
  • path参数用于指定需要被读取的目录的完整路径及目录名;
  • callback参数用于指定读取目录操作完毕时调用的回调函数Function(err,files){};第一个参数为读取目录操作失败时触发的错误的对象,第二个参数值为一个数组,其中存放了读取到的文件中的所有文件名。
var fs = require('fs');
fs.readdir('./',function(err,files){
    if(err){
        console.log("读取目录操作失败");
    }else {
        console.log(files);
    }
});


查看与修改文件或目录的信息

在fs模块中,可以使用 fs.stat() 或 fs.access()或existsSync方法检查一个文件或目录是否存在。

if (fs.existsSync('文件')) {
  console.log('该路径已存在');
}

fs模块中,可以使用realpath或realpathSync方法获取一个文件或目录的绝对路径。

fs.realpath(path,[cache],callback);
  • path参数为需要查看的文件或目录的完整路径;
  • cache参数值为一个对象,其中存放了一些预先指定的路径;
  • callback参数用于指定获取文件或目录的绝对路径操作完毕时执行的回调函数,该回调函数使用两个参数,其中err参数值为获取文件或目录的绝对路径操作失败时触发的错误对象,resolvedPath参数值为获取到的文件或目录的绝对路径。
var fs = require('fs');
fs.realpath('./message.txt',function(err,resolvedPath){
    if(err) {
        console.log("获取文件失败");
    }else {
        console.log(resolvedPath);
    }
});

在fs模块中,可以使用chmod或chmodSync方法修改文件或目录的读写权限。

fs.chmod(path,mode,callback);
  • path参数用于指定需要被修改读写权限的文件的完整路径及文件或目录名;
  • mode参数用于指定修改后的文件或目录读写权限;
  • callback参数用于指定修改文件读写权限操作完成后执行的回调函数,该回调函数使用一个参数,参数值为修改文件读写权限操作失败的触发错误对象。
var fs = require('fs');
// 0600代表所有者可读写,其他人没有任何权限
fs.chmod('./message1.txt',0600,function(err){
    if(err) {
        console.log("修改文件权限操作失败");
    }else {
        console.log("修改文件权限操作成功");
    }
});

// 0644代表所有者可读写,其他人只读
fs.chmod('./message2.txt',0644,function(err){
    if(err) {
        console.log("修改文件权限操作失败");
    }else {
        console.log("修改文件权限操作成功");
    }
});

// 0755代表所有者所有权限,其他所有人可读和执行
fs.chmod('./message3.txt',0755,function(err){
    if(err) {
        console.log("修改文件权限操作失败");
    }else {
        console.log("修改文件权限操作成功");
    }
});

// 0740代表所有者所有权限,所有者所在的组只读
fs.chmod('./message4.txt',0740,function(err){
    if(err) {
        console.log("修改文件权限操作失败");
    }else {
        console.log("修改文件权限操作成功");
    }
});

在fs模块中,可以使用stat方法查看文件信息。

fs.stat(path[, options], callback)
  • path参数用于指定需要被修改读写权限的文件的完整路径及文件或目录名;
  • callback参数用于查看文件操作完成后执行的回调函数Function(err, stats){}err参数为查看文件操作失败的触发错误对象,stats为获取的文件信息对象。

stats对象拥有的方法如下:

stats对象拥有的属性如下:

dev: 16777220,
  mode: 16877,
  nlink: 3,
  uid: 501,
  gid: 20,
  rdev: 0,
  blksize: 4096,
  ino: 14214262,
  size: 96,
  blocks: 0,
  atimeMs: 1561174653071.963,
  mtimeMs: 1561174614583.3518,
  ctimeMs: 1561174626623.5366,
  birthtimeMs: 1561174126937.2893,
  atime: 2019-06-22T03:37:33.072Z,
  mtime: 2019-06-22T03:36:54.583Z,
  ctime: 2019-06-22T03:37:06.624Z,
  birthtime: 2019-06-22T03:28:46.937Z

不建议在调用 fs.open()、 fs.readFile() 或 fs.writeFile() 之前使用 fs.stat() 检查文件的存在性。 而是应该直接地打开、读取或写入文件,如果文件不可用,则处理引发的错误。
若要只检查文件是否存在,但没有更多的操作,则建议使用 fs.access()。

 

移动文件或目录

在fs模块中,可以使用rename或renameSync方法移动文件或目录。

fs.rename(oldPath,newPath,callback);
  • oldPath参数用于指定被移动文件或目录的完整路径;
  • newPath参数用于指定移动后该文件或目录的完整路径;
  • callback参数用于指定移动执行完毕时调用的回调函数,在该回调函数使用一个参数,参数值为移动后操作失败时触发的错误对象。
var fs = require('fs');
var files = fs.rename('./message.txt','./test/test.txt',function(err){
    if(err) {
        console.log("移动文件操作失败");
    }else {
        console.log("移动文件操作成功");
    }
});

意思是将根目录的message.txt文件移动到根目录下test文件中并将文件名或者目录名改为test.txt。但是test文件夹一定是存在的 否则会报错的。

在fs模块中,可以使用truncate或truncateSync方法对文件进行截断操作。

fs.truncate(filename,len,callback);
  • filename:用于指定需要被截断文件的完整路径;
  • len参数值为指定截断后的文件尺寸(以字节为单位);
  • callback参数用于指定截断文件操作完毕时执行的回调函数,该回调函数中使用一个参数,参数值为截断文件操作失败时触发的错误对象。
var fs = require('fs');
fs.truncate('./message.txt',10,function(err) {
    if(err) {
        console.log("对文件进行截断操作失败");
    }else {
        fs.stat('./message.txt',function(err,stats){
            console.log("文件尺寸为:"+stats.size+" 字节");
        });
    }
});

使用open或openSync方法打开文件并返回文件描述符后,可以使用fs模块中的ftruncate或ftruncateSync方法截断文件。

fs.ftruncate(fd,len,callback);

fd参数值为打开文件时返回的文件描述符,Len参数与callback参数的作用与truncate方法的参数相同。

var fs = require('fs');
fs.open('./message.txt','r',function(err,fd){
    fs.ftruncate(fd,10,function(){
        if(err) {
            console.log("对文件进行截断操作失败");
        }else {
            fs.stat('./message.txt',function(err,stats){
                console.log("文件尺寸为:"+stats.size+" 字节");
            });
        }
     });
});

 

删除空目录

在fs模块中,可以使用rmdir或rmdirSync方法删除空目录。

fs.rmdir(path,callback);
  • path参数用于指定需要被删除目录的完整路径;
  • callback参数用于指定删除空目录操作执行完毕时调用的回调函数,该回调函数使用一个参数,参数值为删除目录操作失败时触发的错误对象。
var fs = require('fs');
fs.rmdir('./test',function(err){
    if(err) {
        console.log("删除空目录操作失败");
    }else {
        console.log("删除空目录操作成功");
    }
});

如上代码是删除根目录下test空文件夹,记住是空文件夹,如果有子文件的话,删除会失败,否则的话删除成功。

转载自:https://www.cnblogs.com/tugenhua0707/p/4474924.html

上一篇: Node核心API的fs模块学习(一)  下一篇: require图片显示[object module]  

Node核心API的fs模块学习(二)相关文章