一头扎进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);