前面的博客 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 Socket Process 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.txt Process 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 Deleted Process 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 success Process 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
renamed Process 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:时间间隔

Node.js文件操作二的更多相关文章

  1. Node.js文件操作一

    Node.js和其他语言一样,也有文件操作.先不说node.js中的文件操作,其他语言的文件操作一般也都是有打开.关闭.读.写.文件信息.新建删除目录.删除文件.检测文件路径等.在node.js中也是 ...

  2. Node.js 文件操作

    1.新建一个文件a.txt,并写入"你好,这是一个新文件.". writeFile 代码 demo1.js var fs = require('fs'); console.log( ...

  3. Node.js之操作文件系统(二)

    Node.js之操作文件系统(二) 1.创建与读取目录 1.1 创建目录 在fs模块中,可以使用mkdir方法创建目录,该方法的使用方法如下: fs.mkdir(path,[mode],callbca ...

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

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

  5. 进击Node.js基础(二)

    一.一个牛逼闪闪的知识点Promise npm install bluebird 二.Promise实例 ball.html <!doctype> <!DOCTYPE html> ...

  6. node.js高效操作mongodb

    node.js高效操作mongodb Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为Jav ...

  7. Node.js之操作文件系统(一)

    Node.js之操作文件系统(一) 1. 同步方法与异步方法 在Node.js中,使用fs模块来实现所有有关文件及目录的创建.写入及删除操作.,在fs模块中,所有对文件及目录的操作都可以使用同步与异步 ...

  8. node.js 初学(二)—— 搭建注册/登录服务器

    node.js 初学(二)—— 搭建注册/登录服务器 理论上来说,代码实现在理论和实际上是一样的.但实际上来说,他们不是 做一个最简单的用户注册登录功能 1.接口定义: 注册:/user?act=re ...

  9. Node.js 文件上传 cli tools

    Node.js 文件上传 cli tools byte stream 断点续传 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

随机推荐

  1. dotNet core 应用部署centos

    ---恢复内容开始--- 阅读目录 需要安装的插件以及支撑架构 安装dotnetSDK 安装jexus 安装supervisord 遇到问题汇总 注意事项.扩展延伸 需要安装的插件以及支撑架构 1.d ...

  2. poj1269---直线位置关系

    题目大意:给你8个点,也就是两条直线,让你判断他们的位置关系 代码如下: #include <iostream> #include<cstdio> #include<cm ...

  3. poj1017----模拟

    题目大意: 现有1*1,2*2,3*3,4*4,5*5,6*6规格的产品若干个(高度都为h),问最少需要多少个 6*6*h的箱子把这些产品都装完 输入:每组测试数据共6个整数,分别代表1*1,...6 ...

  4. PHP中日期函数

    1,转化为时间戳函数:strtotime() 本函数接受一个包含美国英语日期格式的字符串并尝试将其解析为Unix时间戳,其值相对于now参数给出的时间,如果没有提供此参数则使用系统当前时间. < ...

  5. 解决ie9以下浏览器对html5新增标签的不识别,并导致CSS不起作用的问题

    https://www.cnblogs.com/yangjie-space/p/4816279.html html5shiv.js和respond.min.js 做页面常用的东西,写这里用的时候省点去 ...

  6. 转载-浅谈Ddos攻击攻击与防御

    EMail: jianxin#80sec.comSite: http://www.80sec.comDate: 2011-2-10From: http://www.80sec.com/ [ 目录 ]一 ...

  7. module.export与export的区别?

    对于大多数node初学者而言, module.exports应该都是理解的, 但多出来一个exports获取就有些疑问了 疑问一: 既然有module.exports了为什么还要有exports? 疑 ...

  8. 请求数据分析 xpath语法 与lxml库

    前情提要: 上节学过从网上获取请求,获取返回内容,带理 获取内容之后,第二部就是获取请求的数据分析 一:xpath 语法 浏览器一般会自带xpatn 解析 这里大概讲述一下xpath 的基本操作 二: ...

  9. 从码农升为PM(节约成本)

    做为一个码农的潜规则,用户怎么要求怎么写,不论过程只论是否符合要求以及减少bug的存在,虽然bug随时会出现,这就是码农,一直以来都说码农分很多种但个人认为就是一种,原因是码农不懂的换位思考,不懂的在 ...

  10. Redhead安装VMware Tools

    Redhead安装VMware Tools VMware Tools 是款插件,便于在图形化界面中移动鼠标和复制拖动文件,对于redhead等命令符界面用处不大. 2.挂载光盘安装方法