一头扎进Node(三) - File System

file.open:异步模式打开文件

fs.open(path, flags[, mode], callback)

案例代码如下:

var fs = require('fs');

/**
 * 参数说明:
 * 	1.path:要打开的文件的文件路径
 *  2.flags:打开文件的方式 读/写
 * 		r:只读方式打开文件,如果文件不存在会抛出异常
 * 		r+:读写模式打开文件,如果文件不存在会抛出异常
 * 		rs:以同步只读的方式打开文件,如果文件不存在会抛出异常
 * 		rs+:以同步读写的方式打开文件,如果文件不存在会抛出异常
 * 		w:以写文件的模式打开文件,如果文件不存在则创建文件,如果存在则清空文件
 * 		wx:以写的模式打开文件,如果文件不存在则创建文件,如果存在抛出异常
 * 		w+:以读写文件的模式打开文件,如果文件不存在则创建文件,如果存在则清空文件
 * 		wx+:以读写的模式打开文件,如果文件不存在则创建文件,如果存在抛出异常
 * 		a:追加模式打开文件,如果不存在则创建文件
 * 		a+:读写和追加模式打开文件,如果不存在则创建文件
 * 		ax:追加模式打开文件,如果存在抛出异常
 * 		ax+:读写和追加模式打开文件,如果存在抛出异常
 * 		
 *  3.mode:设置文件的模式,读写执行(4-2-1)
 *  4.callback:打开文件的回调函数
 *  	function(err,fd){
 *  		//err:文件打开失败的错误信息,如果成功则为null
 *  		//fd:被打开文件的标识
 *  	}
 */
fs.open('test.txst','wx',function(err,fd){
	console.info(err);
	if(err){
		console.info('文件打开失败...');
	}else{
		console.info('文件打开成功...');
	}
});

fs.openSync:同步模式打开文件

fs.openSync(path, flags[, mode])

具体参数用法请参考open方法。

案例代码如下:

var fs = require('fs');

var fd =fs.openSync('test.txt', 'r');
console.info(fd);

fs.read:异步读取一个打开的文件

fs.read(fd, buffer, offset, length, position, callback)

具体参数用法请参考open方法。

案例代码如下:

var fs = require('fs');

fs.open('test.txt','r',function(err,fd){
	if(err){
		console.info('文件打开失败...');
	}else{
		/**
		 * 读取文件
		 * 
		 * fs.read(fd, buffer, offset, length, position, callback)
		 * 		1.fd:通过open方法成功打开的一个文件的返回句柄
		 * 		2.buffer:用于存放读取内容的buffer对象
		 * 		3.offset:新的内容添加到buffer中的起始位置
		 * 		4.length:添加到buffer中的内容长度
		 * 		5.position:读取的文件中的起始位置
		 * 		6.callback:读取文件的回调函数
		 * 			function(err, bytesRead, buffer){
		 * 				//err:错误信息
		 * 				//bytesRead:读取的内容在buffer中的长度
		 * 				//buffer:buffer对象
		 * 			}
		 * @type {Buffer}
		 */
		var bf = new Buffer(10);
		fs.read(fd,bf,0,4,null,function(err, bytesRead, buffer){
			console.info(err); // null or some error
			console.info(bytesRead); // 4
			console.info(buffer); //buffer content
		});
		
	}
});

fs.readSync:同步模式读取打开的文件

fs.readSync(fd, buffer, offset, length, position)

该方法以同步模式读取打开的文件,并且返回了从文件中读取的内容的长度。具体参数用法请参考read方法。

案例代码如下:

var fs = require('fs');

var bf = new Buffer(10);
var fd =fs.openSync('test.txt', 'r');
var len = fs.readSync(fd,bf,0,4,null);
console.info(len); // 4
console.info(bf); // buffer content

fs.rename:异步模式对文件或者文件夹重命名

fs.rename(oldPath, newPath, callback)

对文件或者文件夹进行重命名操作

案例代码如下:

var fs = require('fs');

/**
 * 对文件或者文件夹进行重命名操作
 * 
 * fs.rename(oldPath, newPath, callback)
 *
 * 	1.oldPath:要进行重命名的文件
 * 	2.newPath:要重命名的文件名称
 * 	3.callback:重命名的回调函数
 *  	function(err){
 *  		//err:错误信息
 *  	}
 *  
 */
fs.rename('./srcFile.txt','./destFile.text',function(err){
	console.info(err);
});

注意点

  • 当源文件不存在的时候回报错
  • 当新的文件名称已存在会导致原来的那个文件丢失,不会报错!!!!

fs.renameSync:同步模式对文件或者文件夹进行重命名

fs.renameSync(oldPath, newPath)

该方法以同步模式对文件或者文件夹进行了重命名,返回值为undefined。具体参数用法请参考rename方法。

案例代码如下:

var fs = require('fs');

fs.renameSync('./srcFile.txt','./destFile.text');

fs.stat:异步模式获取文件信息

fs.stat(path, callback)

该方法主要用来获取文件或者文件夹的信息,包括一些类型、时间相管的信息、文件大小等。

案例代码如下:

var fs = require('fs');


fs.stat('./src',function(err,stats){
	/**
	 *
	 * stats.mode:
	 * 		On Win32:
	 *		 	16895 for a dir and 33206 for a file.
	 *    	On Linux:
	 *		   	16877 for a dir, 33188 for a file
	 *		   	
	 */
	console.info("设备名:" + stats.dev);
	console.info("类型:" + stats.mode); //33188-文件、16877-文件夹
	console.info("被连接数目:" + stats.nlink);
	console.info("所有者的用户id:" + stats.uid);
	console.info("所有者的组id:" + stats.gid);
	console.info("设备类型:" + stats.rdev);
	console.info("文件系统 IO 的块大小:" + stats.blksize);
	console.info("号码:" + stats.ino);
	console.info("大小:" + stats.size);
	console.info("所占据块的数目:" + stats.blocks);
	console.info("上次访问时间:" + stats.atime);
	console.info("上次修改时间:" + stats.mtime);
	console.info("上次改变时间:" + stats.ctime);
	console.info("创建时间:" + stats.birthtime);

});

fs.statSync:同步模式获取文件信息

fs.statSync(path)

该方法以同步模式获取文件或者文件夹信息,返回一个stats对象。具体参数用法请参考stat方法。

案例代码如下:

var fs = require('fs');


var stats = fs.statSync('./src');
console.info("设备名:" + stats.dev);
console.info("类型:" + stats.mode); //33188-文件、16877-文件夹
console.info("被连接数目:" + stats.nlink);
console.info("所有者的用户id:" + stats.uid);
console.info("所有者的组id:" + stats.gid);
console.info("设备类型:" + stats.rdev);
console.info("文件系统 IO 的块大小:" + stats.blksize);
console.info("号码:" + stats.ino);
console.info("大小:" + stats.size);
console.info("所占据块的数目:" + stats.blocks);
console.info("上次访问时间:" + stats.atime);
console.info("上次修改时间:" + stats.mtime);
console.info("上次改变时间:" + stats.ctime);
console.info("创建时间:" + stats.birthtime);

posted @ 2016-05-17 20:07  MangoNiki  阅读(184)  评论(0编辑  收藏  举报