/*
*文件的完整读写
*
* 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);
});
})
node.js学习笔记之文件读写操作
最新推荐文章于 2022-03-29 14:05:36 发布