Node.js文件操作二
前面的博客 Node.js文件操作一中主要是对文件的读写操作,其实还有文件这块还有一些其他操作.
一、验证文件path是否正确(系统是如下定义的)
fs.exists = function(path, callback) {if (!nullCheck(path, cb)) return;var req = new FSReqWrap();req.oncomplete = cb;binding.stat(pathModule._makeLong(path), req);function cb(err, stats) {if (callback) callback(err ? false : true);} };fs.existsSync = function(path) {try {nullCheck(path);binding.stat(pathModule._makeLong(path));return true;} catch (e) {return false;} };
二、获取文件信息
获取文件信息用fs.stats(path,callback)、fs.statsSync(path),它们返回Stats对象.下面是系统定义的Stats对象.
// Static method to set the stats properties on a Stats object. fs.Stats = function(dev,mode,nlink,uid,gid,rdev,blksize,ino,size,blocks,atim_msec,mtim_msec,ctim_msec,birthtim_msec) {this.dev = dev;this.mode = mode;this.nlink = nlink;this.uid = uid;this.gid = gid;this.rdev = rdev;this.blksize = blksize;this.ino = ino;this.size = size;this.blocks = blocks;this.atime = new Date(atim_msec);this.mtime = new Date(mtim_msec);this.ctime = new Date(ctim_msec);this.birthtime = new Date(birthtim_msec); };// Create a C++ binding to the function which creates a Stats object. binding.FSInitialize(fs.Stats);fs.Stats.prototype._checkModeProperty = function(property) {return ((this.mode & constants.S_IFMT) === property); };fs.Stats.prototype.isDirectory = function() {return this._checkModeProperty(constants.S_IFDIR); };fs.Stats.prototype.isFile = function() {return this._checkModeProperty(constants.S_IFREG); };fs.Stats.prototype.isBlockDevice = function() {return this._checkModeProperty(constants.S_IFBLK); };fs.Stats.prototype.isCharacterDevice = function() {return this._checkModeProperty(constants.S_IFCHR); };fs.Stats.prototype.isSymbolicLink = function() {return this._checkModeProperty(constants.S_IFLNK); };fs.Stats.prototype.isFIFO = function() {return this._checkModeProperty(constants.S_IFIFO); };fs.Stats.prototype.isSocket = function() {return this._checkModeProperty(constants.S_IFSOCK); };// Don't allow mode to accidentally be overwritten. ['F_OK', 'R_OK', 'W_OK', 'X_OK'].forEach(function(key) {Object.defineProperty(fs, key, {enumerable: true, value: constants[key] || 0, writable: false}); });
通过Stats对象可以获取该文件的信息例如:文件大小、创建时间、文件类型等。
var fs = require('fs'); fs.stat('file_stats.js', function (err, stats) {if (!err){console.log('stats: ' + JSON.stringify(stats, null, ' '));console.log(stats.isFile() ? "Is a File" : "Is not a File");console.log(stats.isDirectory() ? "Is a Folder" : "Is not a Folder");console.log(stats.isSocket() ? "Is a Socket" : "Is not a Socket");stats.isDirectory();stats.isBlockDevice();stats.isCharacterDevice();//stats.isSymbolicLink(); //only lstat stats.isFIFO();stats.isSocket();} });
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe file_stats.js stats: {"dev": 1086025760,"mode": 33206,"nlink": 1,"uid": 0,"gid": 0,"rdev": 0,"ino": 12384898975555938,"size": 535,"atime": "2016-03-12T04:09:24.523Z","mtime": "2014-11-10T22:12:29.000Z","ctime": "2016-03-21T11:39:54.207Z","birthtime": "2016-03-12T04:09:24.523Z" } Is a File Is not a Folder Is not a SocketProcess finished with exit code 0
三、文件遍历
在其他系统也都有文件遍历.由于文件是树的形式存在,所以使用递归遍历.下面是用异步api,那同步api也能推出来。fs.readdirsync(path).
/*** Created by Administrator on 2016/3/22.*/ var fs = require('fs'); var Path = require('path'); function WalkDirs(dirPath){console.log(dirPath);fs.readdir(dirPath, function(err, entries){for (var idx in entries){var fullPath = Path.join(dirPath, entries[idx]);(function(fullPath){fs.stat(fullPath, function (err, stats){if (stats && stats.isFile()){console.log(fullPath);} else if (stats && stats.isDirectory()){WalkDirs(fullPath);}});})(fullPath);}}); } WalkDirs("../");
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe file_readdir.js ../ ..\.idea ..\data ..\asyncReadWrite.js ..\Buffer.js ..\Immediate.js ..\Console.js ..\Interval.js ..\nexttick.txt ..\OpenClose.js ..\StreamReadWrite.js ..\syncReadWrite.js ..\nexttick1.txt ..\.idea\.name ..\.idea\encodings.xml ..\.idea\jsLibraryMappings.xml ..\.idea\misc.xml ..\.idea\modules.xml ..\.idea\NodeJsDemo.iml ..\.idea\workspace.xml ..\nexttick2.txt ..\data\config.txt ..\timer.js ..\SimpleReadWrite.js ..\data\file_readdir.js ..\data\grains.txt ..\data\fruit.txt ..\data\openColse1.txt ..\data\veggie.txt ..\data\openClose.txtProcess finished with exit code 0
四、文件删除
根据前面的几个api,删除有fs.unlink(path,callback)那就有fs.unlink(path).
fs.unlink("../nexttick1.txt", function(err){console.log(err ? "File Delete Failed" : "File Deleted"); });
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe file_readdir.js File DeletedProcess finished with exit code 0
五、截断文件
截断文件把文件结束设置为比当前小的值来减少文件的大小.
fs.truncate = function(path, len, callback)
fs.truncateSync = function(path, len) 同步返回布尔值
fs.truncate("test.txt",8,function(err){console.log(err?"File Truncate Failed":"File Truncated") })
六、建立删除文件夹
刚才是遍历用的是readdir,现在是建立则用fs.mkdir(path,[mode],callback)或fs.mkdirSync(path,[mode])。删除则用fs.rmdir(path,callback)或fs.rmdirSync(path).
fs.mkdir("../test",function(err){console.log(err?"mkdir Failed":"mkdir success")if(!err){rmdir();} }); function rmdir() {fs.rmdir("../test",function(err){console.log(err?"rmdir Failed":"rmdir success")}); }
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe file_readdir.js mkdir success rmdir successProcess finished with exit code 0
七.文件重命名
这个重命名不只是改变文件的名字,它可以改变文件的路径。
fs.rename("test","../test1",function(err){console.log(err ? "rename Failed" : "renamed"); })
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe file_readdir.js renamedProcess finished with exit code 0
八、文件监视
文件发生变化时会执行回调函数.
fs.watchFile("../test1",{persistent:true,interval:5000},function(curr,prev){console.log(curr.mtime);console.log(prev.mtime); }); fs.rename("../test1","test",function(err){console.log(err ? "rename Failed" : "renamed"); })
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe file_readdir.js renamed Thu Jan 01 1970 08:00:00 GMT+0800 (中国标准时间) Tue Mar 22 2016 19:30:11 GMT+0800 (中国标准时间)
persistent:持续 interval:时间间隔
转载于:https://www.cnblogs.com/5ishare/p/5308167.html
Node.js文件操作二相关推荐
- [Node]node.js 文件操作
既然到了后台,只要你有权限就可以为所欲为了! 创建文件夹 //fs.js var fs = require('fs'); fs.mkdirSync('a', 0755); fs.mkdirSync(' ...
- node.js文件操作
介绍:fs模块是文件操作的封装,它提供了文件的读取,写入,更名,删除,遍历目录,链接POSIX文件系统操作.与其他模块不同的是,fs模块中所有的操作都提供了异步和同步两个版本,例如读取文件内容函数异步 ...
- 在Node.js中操作文件系统(一)
在Node.js中操作文件系统 在Node.js中,使用fs模块来实现所有有关文件及目录的创建,写入及删除操作.在fs模块中,所有对文件及目录的操作都可以使用同步与异步这两种方法.比如在执行读文件操作 ...
- 在 Node.js 中操作 Redis
在 Node.js 中操作 Redis Node.js 中可以操作 Redis 的软件包推荐列表:https://redis.io/clients#nodejs. 推荐下面两个: node-redis ...
- node.js + sequelize 操作 MySQL 数据库
Node.js + Sequelize 操作 MySQL 数据库 一. Sequelize 简介 二. 基本操作 1. 连接数据库 2. 创建一张表 3. 对数据表操作 3.1 插入操作 3.2 读取 ...
- 运行第一个node.js文件
安装node.js 链接:https://nodejs.org/en/ 选择downloads 再选择对应的版本, Windows Installer (.msi):表示需要安装后才能运行node.j ...
- node.js文件的压缩解压
node.js文件的压缩解压 流式读写文件 知识预知 例子 压缩解压文件 知识预知 压缩文件 解压文件 流式读写文件 第一步先要弄清楚为什么需要压缩和解压文件,这是因为文件太大了,我们需要将文件进行压 ...
- node读取文件操作
导言:nodejs中所有与文件相关的操作都在fs模块中,而读写操作又是我们会经常用到的操作,nodejs的fs模块针对读操作为我们提供了readFile,read, createReadStream三 ...
- js文件操作——导出导入
专栏 匠心博客 文章详情 匠心 4.2k 发布于 匠心博客 关注专栏 2016-08-16 发布 JavaScript进阶学习(三)-- 基于html5 File API的文件操作 javascrip ...
最新文章
- 多模态生物识别有什么优势
- 调用自定义函数search(int list[], int n),在数组中查找某个数
- bbs mysql_简单BBS程序(需MySQL支持)
- open ai gpt_您实际上想尝试的GPT-3 AI发明鸡尾酒
- 女人15个秘密武器疼爱男人(女人必看)
- vim 的寄存器/剪贴板
- 1090 Highest Price in Supply Chain (25)
- 黑马商城项目级联选择占满全屏解决方案
- ad文件服务器部署,AD 集成 – 配置 ADFS 登陆 - Seafile 服务器用户手册
- 学习Spring Boot:(二十四)多数据源配置与使用
- iOS 8 新特性介绍
- 查看python安装路径以及pip安装的包列表及路径
- ARC项目中部分类不用ARC
- mysql505复位密码_MySQL数据库复位根用户的密码_MySQL
- Java SE 正则表达式 API Pattern 与 Matcher.
- 最小生成树两种方法Prim+kruskal代码模板
- HTTP请求报文与响应报文
- 安卓最好的流量防火墙—Droidwall
- python查询IP归属地
- win10快捷方式去箭头(win10快捷方式去箭头副作用)
热门文章
- 再说invoke和begininvoke
- 组件开发之Asp.net服务器控件Collection[集合]属性的设计时支持--编辑、保存
- DataReader类访问字段的值
- python tableview 列宽_QTableView设置列宽
- 孪生网络图像相似度_孪生网络:使用双头神经网络进行元学习
- ajax跨域为什么会失败,ajax跨域请求失败是怎么回事?
- ims系统 呈现服务器,基于IMS的呈现服务器的设计与实现
- 一文了解 Kubernetes 中的服务发现
- 单片机移频防啸叫_基于ARM9的防啸叫音频放大器的设计
- matlab 全部的随机数函数