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

/*
 *文件的完整读写
 *
 * 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);
    });
})


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值