您的位置:首页 > Web前端 > Node.js

node.js学习笔记之文件读写操作

2017-07-27 09:06 751 查看
/*
*文件的完整读写
*
* readFile(path,[options],callback)     异步读写文件
*  参数:1、需要读取的文件名及路径(必填)
*       2、options为一个对象,指定读取文件时需要使用的选项,在该参数值中可以使用flag属性指定对文件的操作。默认为“r”。
*              也可以使用encoding属性来指定使用何种编码格式读取文件
*       3、回调函数function(err,data){
*                  //err:读取文件失败时触发的错误对象
*                  //data:读取到的文件内容
*                  }
* readFileSync(path,options)          同步读取文件
*/

/*使用readFile方式读取文件*/

var fs = require('fs');
fs.readFile('./test.txt','utf8',function (err,data) {
if(err){
console.log('文件读取发生错误');
}else{
//如果不写utf参数,下面可以这样写
//console.log(data.toString());
console.log(data);
}
})

/*使用readFileSync读取文件*/

var fs = require('fs');
try{
var data =fs.readFileSync('./test.txt','utf8');
console.log(data);
}catch (ex){
console.log('文件读取发生错误');
}

/*
*writeFile(path,data,[options],callback)     异步写文件方法
*      参数同上,其中data为需要写入的数据
*writeFileSync(path,data,options)              同步写文件方法
*/

/*使用writeFile完整写入文件*/

var fs = require('fs');

fs.writeFile('./message.txt','这是第一行。\r\n这是第二行',function (err) {
if(err)
console.log('写文件操作失败\n');
else console.log('写文件操作成功');
});

/*将缓存区中的数据写入到文件中*/
var fs = require('fs');
var data = new Buffer('我喜欢编程');
fs.writeFile('./message.txt',data,function (err) {
//message.txt为当前目录下的一个.txt文件
if(err)
console.log('写文件操作失败\n');
else console.log('写文件操作成功\n');
})

/*使用writeFile方法追加数据*/
var fs = require('fs');
var options={
flag:'a'
}
fs.writeFile('./message.txt','这是追加的数据',options,function (err) {
if(err)
console.log('写文件操作失败\n');
else console.log('写文件操作成功\n');
})

/*使用writeFile方法复制图片文件*/
var fs = require('fs');
fs.readFile('./a.jpg','base64',function (err, data) {
fs.writeFile('./b.jpg',data,'base64',function (err) {
if(err)
console.log('写文件操作失败\n');
else console.log('写文件操作成功\n');
})
});

/*使用同步方式写文件*/

var fs = require('fs');
try{
fs.writeFileSync('./message.txt','这是第一行。\r\n这是第二行');

}catch (ex){
console.log('文件写入发生错误');
}

/*
*      追加文件
*  appendFile(path,data,[options],callback)    异步追加文件
*  appendFileSync(path,data,[options])         同步追加文件
* */
/*异步方式追加文件*/
var fs = require('fs');
fs.appendFile('./message.txt','这是第二个追加的数据','utf8',function (err) {
if(err)
console.log('追加文件操作失败\n');
else console.log('追加文件操作成功\n');
})

/*同步方式追加文件*/
var fs = require('fs');
try{
fs.appendFileSync('./message.txt','这是第三行追加的数据','utf8');
}catch (ex){
console.log('文件写入发生错误');
}

/*
*
*打开文件方法:
*      fs.open(path,flags,[mode],callback)     异步打开文件
*      其中mode为可选参数
*      回调函数:function(err,fd){
*          //err:读取文件失败时触发的错误对象
*          //fd为一个整数,表示打开文件的描述符
*      }
*      fs.open(path,flags,[mode])          同步打开文件
*
* */

/*使用open打开文件实例*/

var fs = require('fs');
fs.open('./test.txt','r',function (err, fd) {
//其中“r”为打开文件的方式
console.log(fd);
});

/*
* 从指定位置开始读写文件
*       fs.read(fd,buffer,offset,length,position,callback)      异步读文件
*       参数:fd:一个整数,必须为open或openSync方法打开文件时所返回的文件描述符
*             buffer:Buffer对象,用于指定将文件数据读取到那个缓冲区
*             offset:整数。指定向缓冲区写入数据的开始位置
*             length:整数。指定从文件中读取的字节数
*             position:整数。用于指定读取文件的开始位置
*             callback:回调函数。function(err,byteRead,buffer){
*                                   //err:操作失败时所触发的错误对象
*                                   //byteRead:整数。读取到的字节数
*                                   //被读取的缓冲区对象
*                                   }
*        fs.read(fd,buffer,offset,length,position)           同步读文件
*        参数同上
* */
/*read方法使用示例*/
var fs = require('fs');
fs.open('./message.txt','r',function (err, fd) {
//message.txt内容为:我喜爱编程
var buf = new Buffer(255);
//一个汉字的utf编码为三个字节数据
fs.read(fd,buf,0,9,3,function (err, byteRead, buffer) {
console.log(buffer.slice(0,byteRead).toString())//输出:喜爱编
})
//如果position为null时,从文件的当前读取位置(前一次读取开始位置+读取的字节数)继续向下读取
fs.read(fd,buf,0,3,null,function (err, byteRead, buffer) {
console.log(buffer.slice(0,byteRead).toString())//输出:程
})
})

/*从文件的当前被读取位置读取文件*/
var fs = require('fs');
fs.open('./message.txt','r','utf8',function (err, fd) {
var buf = new Buffer(255);
fs.read(fd,buf,0,)
})

/*
* 从指定位置写入文件
*       fs.write(fd,buffer,offset,length,position,callback)      异步写文件
*       参数同上,不同是buffer为指定从那个缓冲区读取数据写入文件
*       fs.writeSync(fd,buffer,offset,length,position)      同步写文件
* */

/*write方法使用示例*/
var fs = require('fs');
var buf = new Buffer('我喜爱编程');
fs.open('./test.txt','w',function (err, fd) {
fs.write(fd,buf,3,9,0,function (err,byteWrite,buffer) {
//向文件中写入   喜爱编
fs.write(fd,buf,12,3,null,function (err, byteWrite, buffer) {
//向文件中写入  程
if(err)
console.log('写文件操作失败');
else
console.log('写文件操作成功');
})

});
})

/*
* 关闭文件
*       fs.close(fd,[callback])     异步关闭文件
*       callback为可选参数,作为关闭文件操作结束时的回调函数
*       fs.closeSync(fd)            同步关闭文件
*
*       注意:在写文件时,操作系统做法是首先将部分数据读到内存中,再把数据写入文件中,当数据读完时并不代表数据已经写完。
*             这是如果调用close或者closeSync函数,那么就会有部分数据丢失,我们可以调用fs模块中的fsync方法对文件进行同步操作,
*             即将内存缓冲区中的数据全部写入文件。
*             fs.fsync(fd,[callback])
* */
/*使用fsync方法确保文件全部写入*/
var fs = require('fs');
var buf = new Buffer('我喜爱编程');
fs.open('./test.txt','w',function (err, fd) {
fs.write(fd,buf,0,15,0,function (err,byteWrite,buffer) {
if(err)
console.log('写文件操作失败');
else
console.log('写文件操作成功');
fs.fsync(fd);
fs.close(fd);
});
})
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: