四、fs文件系统模块
创始人
2024-04-25 11:22:14
0

         fs模块是Node.js官方提供用来操作文件的模块,属于核心模块,提供了一些列的方法和属性,用来满足用户的操作需求;

引入fs模块

const fs = require('fs');

fs.readFile() 读取

        读取指定的内容,fs.readFile(path[,options],callback) '[ ]'为可选参数 ;path是文件路径,options是用什么编码格式读取文件,callback是读取完成之后通过回调的形式拿到读取失败err和成功dataStr的结果;

// read.txt
被读取的文件
// readFile.js文件
const fs = require('fs');
fs.readFile('./read.txt','utf8',function(err,dataStr){console.log(err);         // 读取成功err的值为 null,console.log(dataStr);     // 读取dataStr失败,dataStr为undefined
})

文件是否读取成功?

const fs = require('fs');
fs.readFile('./read.txt','utf8',function(err,dataStr){if(err){return console.log('读取失败:'+err.message);}console.log('读取的内容:'+dataStr);
})

 将读取的文件名称改掉,使其读取错误结果:read.txt => reads.txt ,没有该文件;


fs.writeFile() 写入

        写入指定内容,fs.writeFile(file,data[,options],callback),file表示文件的存放路径,data是写入的内容,options是编码格式(默utf8),callback完成后回调函数;

const fs = require('fs');
// 往read.txt内写入
fs.writeFile('./read.txt','写入syan123',function(err){console.log(err);    // 写入成功err的值为null
})

 判断是否写入成功?

const fs = require('fs');
// 往read.txt内写入
fs.writeFile('./read.txt','写入syan123',function(err){if(err){console.log("写入失败:"+err.message);}console.log("写入成功!")
})

fs.writeFile 注意

fs.writeFile() 方法只能用来创建文件,不能创建路径;

重复调用fs.writeFile() 写入同一个文件,新写入的内容会覆盖掉之前的内容;


 文件路径问题

        使用fs.readFile()或者fs.writeFile()中的path路径都是相对路径 ' ./read.txt ',这种方式会出现路径错误的问题:在运行node xx.js 文件时,会在当前所处目录去动态拼接完成路径;

 如以下这样运行的话,路径的拼接就会出现错误,以致于读取失败;        

         这样一来可以通过完整的路径来进行文件的读取,就能够避免掉出现路径拼接出现错误的文体,但带来的是文件的【移植性】会变得很差,不利于维护,如下:

const fs = require('fs');
fs.readFile('C:\\Users\\Administrator\\Desktop\\node\\Node\\fs模块\\read.txt','utf8',function(err,dataStr){if(err){return console.log('读取失败:'+err.message);}console.log('读取的内容:'+dataStr);
})

        既然动态的拼接会出现问题,使用完成路径导致文件移植性和维护性差点问题,可以通过以下这种方式 __dirname 表示当前文件所处的目录文件再动态的拼接路径


 __dirname 解决路径问题

const fs = require('fs');
fs.readFile( __dirname + '/read.txt','utf8',function(err,dataStr){if(err){return console.log('读取失败:'+err.message);}console.log('读取的内容:'+dataStr);console.log('读取目录路径:'+ __dirname);
})


文件的打开模式有以下几种:

'a'打开文件用于追加。若文件不存在,则创建该文件。
'a+'打开文件用于读取和追加。若文件不存在,则创建该文件。
'as+'

打开文件用于读取和追加(在同步模式中),若文件不存在,则创建该文件。

'r'打开文件用于读取。若文件不存在,则会发生异常。
'rs+'

打开文件用于读取和写入(在同步模式中),指示操作系统绕过本地的文件系统缓存。

'w+'

打开文件用于读取和写入。如果文件不存在则创建文件,若文件存在则截断文件。

fs.openSync() 打开文件 —— 同步

        同步打开文件,fs.openSync(path,[flags,mode]),flag是文件系统flag支持,默认是'r';

// openSync.js文件
const fs = require('fs');
const fd = fs.openSync( __dirname + '/read.txt','r');
console.log(fd);    // fd 文件描述符

返回值为:,表示文件描述符的整数;

fs.open() 打开文件 —— 异步

        异步打开文件,fs.open(path,[flags,mode],callback),有callback回调;

// open.js文件
const fs = require('fs');
fs.open(__dirname+'/reads.txt','r',function(err,fd){if(err){return console.log('文件打开失败!');}// fd是文件描述符,文件标识console.log(fd);
})

         同步和异步打开文件都有返回值表示文件描述符的整数,区别在于异步打开文件有两个回调函数(err,fd),err是异常的错误信息,fd是打开文件后的标识;对应的有同步/异步的打开文件,就有同步和异步的关闭文件;


fs.closeSync() 关闭文件 —— 同步

        同步关闭文件,fs.closeSync(fd),fd为文件关闭的标识;通过fs.openSync() 同步打开文件能获得打开文件的标识返回值 ,同步关闭文件可以通过fs.closeSync(fd) 根据打开文件的标识来关闭;

fs.close() 关闭文件 —— 异步 

        异步关闭文件,fs.close(fd,callback),异步关闭会有callback回调,内部有1和异常参数err;

// close.js文件
const fs = require('fs');
// 打开文件后关闭
fs.open( __dirname + '/read.txt','r',function(err,fd){if(err){ return console.log('文件打开失败!');}fs.close(fd,function(fd,err){if(err) throw err;console.log('文件正常关闭');})
})


 fs.appendFile() 文件追加

        向文件追加内容,fs.appendFile(file,data[,options],callback) ,data是要追加的文件内容,可以是String(字符串)或者buffer(流)对象;现在就往read.txt文件内去追加内容:

// appenFile.js 文件
const fs = require('fs');
const content = '追加的数据内容:syan123';
fs.appendFile(__dirname+'/read.txt',content,function(err){if(err){return console.log(err);}console.log('append成功!')
})


fs.unlinkSync() 删除文件 —— 同步

        同步方式删除,fs.unlinkSync(path),返回值是undefined;

// unlinkSync.js文件 —— 观察read.txt文件
const fs = require('fs');
const rs = fs.unlinkSync( __dirname + '/read.txt');
console.log(rs);    // undefined

fs.unlink() 删除文件 —— 异步

        异步方式删除,fs.unlink(path,callback);

// unlink.js文件 —— 观察read.txt文件
const fs = require('fs');
fs.unlink(__dirname + '/read.txt',function(err){if(err){return console.log('unlink失败');}console.log('unlink成功');
})


目录操作

fs.mkdir() 创建目录

        创建目录操作,fs.mkdir(path,[mode],callback);mode设置目录权限,默认为0777;

// mkdir.js文件 —— 观察是否出现demo
const fs = require('fs');
fs.mkdir( __dirname + '/demo',function(err){if(err){return console.log("创建失败!");}console.log("创建成功!");
})

fs.readdir() 读取目录 

        读取目录操作,fs.readdir(path[,options],callback),异步读取目录内容,options是可以是编码也可以是encoding,encoding为'buffer',返回文件名作为buffer对象传入;callback有两个参数(err,files),err是异常出错的信息,files是目录中文件名称的数组;先在demo文件下面定义两个文件:fileOne.js 和 fileTwo.js ,通过回调中的files获取目录下的文件名称数组;

// readdir.js文件
const fs = require('fs');
fs.readdir(__dirname+'/demo',function(err,files){if(err){return console.log(err);}console.log(files);
})

打印出在demo目录下的文件名称数组 [ 'fileOne.js' ,'fileTwo.js' ] ;

fs.stat() 查看目录

        查看目录及文件信息,fs.stat(path,callback),可以通过callback中的参数stats访问文件属性

// stat.js 文件
const fs = require('fs');
fs.stat(__dirname + '/demo',function(err,stats){if(err) throw err;console.log(stats);
})


检查目录是否存在

        异步检查目录,fs.exists()已经是被废弃掉了的API,使用同步的方式检查,fs.existsSync();

// existsSync.js 文件
// 检查目录是否存在
const fs = require('fs');
const rs =  fs.existsSync(__dirname + '/demo')
console.log(rs);


fs.rmdir() 删除目录 

        删除目录,前提是目录必须是空的,不能包含任何文件;fs.rmdir(path,callback);将demo目录文件删除掉,然后将demo目录删除掉;

// rmdir.js文件
const fs = require('fs');
fs.rmdir(__dirname + '/demo',function(err){if(err){return console.log("删除demo目录失败!");}console.log("删除成功!");
})

删除有文件的目录

        删除含有文件的目录,通过先删除文件可以fs.unlink(),再通过fs.rmdir()可以删除空目录即可;下面来删除demo目录,demo目录下还有两个文件fileOne.js和fileTwo.js;

// demo.js文件
const fs = require('fs');
// 读取目录信息
fs.readdir(__dirname + '/demo',function(err,files){if(err) throw err;console.log("files文件:",files);// 删除文件files.forEach(function(file){console.log(file);fs.unlink(__dirname+'/demo/'+file,function(err){console.log(__dirname+'/demo'+file);if(err){return console.log("删除文件失败!");}console.log("删除文件成功!");})})// 删除目录fs.rmdir(__dirname+'/demo',function(err){if(err){return console.log("目录删除失败!");}console.log("目录删除成功!");})
})

        以上就是关于Node.js中的fs文件操作模块的一些基础内容,当然关于fs模块的内容不止这些,还有其他结合buffer的一些内容,比如还有一些读写fs.read() 和fs.write() 等的一些方法!在后续的内容相继来讲!

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...