前面的博客 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文件操作二相关推荐

  1. [Node]node.js 文件操作

    既然到了后台,只要你有权限就可以为所欲为了! 创建文件夹 //fs.js var fs = require('fs'); fs.mkdirSync('a', 0755); fs.mkdirSync(' ...

  2. node.js文件操作

    介绍:fs模块是文件操作的封装,它提供了文件的读取,写入,更名,删除,遍历目录,链接POSIX文件系统操作.与其他模块不同的是,fs模块中所有的操作都提供了异步和同步两个版本,例如读取文件内容函数异步 ...

  3. 在Node.js中操作文件系统(一)

    在Node.js中操作文件系统 在Node.js中,使用fs模块来实现所有有关文件及目录的创建,写入及删除操作.在fs模块中,所有对文件及目录的操作都可以使用同步与异步这两种方法.比如在执行读文件操作 ...

  4. 在 Node.js 中操作 Redis

    在 Node.js 中操作 Redis Node.js 中可以操作 Redis 的软件包推荐列表:https://redis.io/clients#nodejs. 推荐下面两个: node-redis ...

  5. node.js + sequelize 操作 MySQL 数据库

    Node.js + Sequelize 操作 MySQL 数据库 一. Sequelize 简介 二. 基本操作 1. 连接数据库 2. 创建一张表 3. 对数据表操作 3.1 插入操作 3.2 读取 ...

  6. 运行第一个node.js文件

    安装node.js 链接:https://nodejs.org/en/ 选择downloads 再选择对应的版本, Windows Installer (.msi):表示需要安装后才能运行node.j ...

  7. node.js文件的压缩解压

    node.js文件的压缩解压 流式读写文件 知识预知 例子 压缩解压文件 知识预知 压缩文件 解压文件 流式读写文件 第一步先要弄清楚为什么需要压缩和解压文件,这是因为文件太大了,我们需要将文件进行压 ...

  8. node读取文件操作

    导言:nodejs中所有与文件相关的操作都在fs模块中,而读写操作又是我们会经常用到的操作,nodejs的fs模块针对读操作为我们提供了readFile,read, createReadStream三 ...

  9. js文件操作——导出导入

    专栏 匠心博客 文章详情 匠心 4.2k 发布于 匠心博客 关注专栏 2016-08-16 发布 JavaScript进阶学习(三)-- 基于html5 File API的文件操作 javascrip ...

最新文章

  1. 多模态生物识别有什么优势
  2. 调用自定义函数search(int list[], int n),在数组中查找某个数
  3. bbs mysql_简单BBS程序(需MySQL支持)
  4. open ai gpt_您实际上想尝试的GPT-3 AI发明鸡尾酒
  5. 女人15个秘密武器疼爱男人(女人必看)
  6. vim 的寄存器/剪贴板
  7. 1090 Highest Price in Supply Chain (25)
  8. 黑马商城项目级联选择占满全屏解决方案
  9. ad文件服务器部署,AD 集成 – 配置 ADFS 登陆 - Seafile 服务器用户手册
  10. 学习Spring Boot:(二十四)多数据源配置与使用
  11. iOS 8 新特性介绍
  12. 查看python安装路径以及pip安装的包列表及路径
  13. ARC项目中部分类不用ARC
  14. mysql505复位密码_MySQL数据库复位根用户的密码_MySQL
  15. Java SE 正则表达式 API Pattern 与 Matcher.
  16. 最小生成树两种方法Prim+kruskal代码模板
  17. HTTP请求报文与响应报文
  18. 安卓最好的流量防火墙—Droidwall
  19. python查询IP归属地
  20. win10快捷方式去箭头(win10快捷方式去箭头副作用)

热门文章

  1. 再说invoke和begininvoke
  2. 组件开发之Asp.net服务器控件Collection[集合]属性的设计时支持--编辑、保存
  3. DataReader类访问字段的值
  4. python tableview 列宽_QTableView设置列宽
  5. 孪生网络图像相似度_孪生网络:使用双头神经网络进行元学习
  6. ajax跨域为什么会失败,ajax跨域请求失败是怎么回事?
  7. ims系统 呈现服务器,基于IMS的呈现服务器的设计与实现
  8. 一文了解 Kubernetes 中的服务发现
  9. 单片机移频防啸叫_基于ARM9的防啸叫音频放大器的设计
  10. matlab 全部的随机数函数