Node.js学习笔记——文件处理

附录:

flag属性:
  • ’r’:读取文件,不存在则抛出异常
  • ’r+’:读取并写入文件,不存在则抛出异常
  • ‘rs’:不建议使用,懒得打了
  • ‘w’:不存在则创建并写入,已经存在则清空再写入
  • ‘wx’:与w类似,但是以排他方式写入文件(不懂)
  • ‘w+’:读取并写入文件。如果文件不存在则创建该文件,如果存在则清空重来。
  • ‘wx+’:与w+类似,但是以排他方式写入文件(不懂)
  • ‘a’:追加写入文件,如果不存在则创建
  • ‘ax’:类似wx 啦
  • a+、ax+类似啦
mode属性
  • 第一个数字必须为0;第二个规定文件或目录所有者的权限;第三个用于规定文件或目录所有者所属用户组的权限;第四个规定其他人的权限(要复合权限就加起来)
  • 1:执行权限 2:写权限 4:读权限
encoding属性
  • utf8 ascii base64

对文件的完成读写

fs.readFile()
var fs=require('fs');
fs.readFile('./hello.txt',function (err,data) {
    if(err)console.log('there is error when reading');
    else console.log(data.toString()); //如果没有toString()会输出buffer
});
//等同于以下
var fs=require('fs');
fs.readFile('./hello.txt','utf-8',function (err,data) {
    if(err)console.log('there is error when reading');
    else console.log(data); //输出this is tested for filereading
});
//console:
//this is tested for filereading
fs.readFileSync()
var fs=require('fs');
try{
    var data=fs.readFileSync('./hello.txt','utf-8');
    console.log(data);
}
catch(err){
    console.log('error happened!!')
}
fs.writeFile(filename,data,[option],callback)
  • 写文件
var fs=require('fs');
var data='what are you talking about?'
fs.writeFile('./hello.txt',data,{flag:'a'},function (err) {
    if(err)console.log('failed');
    else console.log('succeeded');
})

此时option为对象{flag:‘a’},所以执行代码后在相同目录就会寻找一个hello.txt并在文末加入data,否则建立了一个hello.txt的文件在文末加入data。

  • 写图片
var fs = require('fs');
fs.readFile('./forjs.jpg','base64',function (err, data) {
    fs.writeFile('./newone.jpg', data.toString(), 'base64',function (err) {
        if (err) console.log('new photo failed');
        else console.log('new photo succeeded');
    })
})//我也不知道为什么要用base64编码,反正用就对了
fs.appendFile(filename,data,[option],callback)

跟writeFile几乎相同,区别在于’option’默认为’a‘.

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

配合以下使用:

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

fd跟fs.open所使用的回调函数中返回的文件描述符
buffer为一个Buffer对象,指定将文件数据读取到哪个缓存区
offset用于指定向缓存区中写入数据时的开始写入位置
length指定从文件中读取的字节数
position指定读文件时的开始位置
callback函数:function(err,byteRead,buffer),byteRead代表实际读取的字节数,buffer参数值为被读取的缓存区对象

var fs = require('fs');
fs.open('./hello.txt', 'r+', function (err, file) {
    var buf = new Buffer(255);
    fs.read(file, buf, 0, 9, 3, function (err, byteread, buffer) {
        console.log(buffer.slice(0, byteread).toString());
        console.log('hello world');
    });
})

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

callback函数:function(err,written,buffer),byteRead代表被写入的字节数,buffer参数值为被读取的缓存区对象

var fs=require('fs');
 fs.open('hello.txt','w',function (err,fd) {
    input=new Buffer('我是聪小弟') 
    fs.write(fd,input,0,15,0,function (err,written,buffer) {
        console.log('succeed in writing');
        console.log('this is written:'+written);
        console.log('this is buffer:'+buffer);
    })
 })
 //
 succeed in writing
this is written:15
this is buffer:我是聪小弟
fs.close(fd,[callback])

当对文件的读写操作执行完毕后,我们通常需要关闭该文件,尤其是在文件以排他方式被打开的时候。

var fs = require('fs');
fs.open('hello.txt', 'wx', function (err, fd) {
    input = new Buffer('我是刘聪')
    fs.write(fd, input, 0, 15, 0, function (err, written, buffer) {
            console.log('成功');
            fs.close(fd,function (err) {
            });
    })
});
fs.fsync(fd,[callback])

在文件中写入数据的时候,操作系统的做法是首先将该部分数据读到内存中,再把数据写到文件中,当数据读完时并不代表数据已经写完了,因为还有一部分有可能会留在buffer中。这时候如果close关闭文件,部分数据可能会丢失。所以调用fsync方法对文件进行同步操作,将buffer中剩余的数据全部写入文件。

var fs = require('fs');
fs.open('hello.txt', 'wx', function (err, fd) {
    input = new Buffer('我是刘聪')
    fs.write(fd, input, 0, 15, 0, function (err, written, buffer) {
            console.log('成功');
             fs.fsync(fd,function (err) {
            });
            fs.close(fd,function (err) {
            });
    })
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值