本文共 2966 字,大约阅读时间需要 9 分钟。
二、以字节方式操作文件
1.fs.open(filename, flags, [mode], callback); 打开文件
/**
* filename, 必选参数,文件名 * flags, 操作标识,如"r",读方式打开 * [mode],设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。 * callback 打开文件后回调函数,参数默认第一个err,第二个fd为一个整数,表示打开文件返回的文件描述符,window中又称文件句柄 */var fs=require('fs');var path=require('path');var file1=path.resolve('/test1/one.txt');fs.open(file1,'r+',function(err,fd){ if(err){ return console.error(err); } console.info(fd); //fd 文件句柄 console.log('文件打开成功');});2. fs.read(fd, buffer, offset, length, position, callback); 读取文件 ,读取打开的文件内容到缓冲区中
/**
* fd, 使用fs.open打开成功后返回的文件描述符 * buffer, 一个Buffer对象,v8引擎分配的一段内存 * offset, 整数,向缓存区中写入时的初始位置,以字节为单位 * length, 整数,读取文件的长度 * position, 整数,读取文件初始位置;文件大小以字节为单位 * callback(err, bytesRead, buffer), 读取执行完成后回调函数,bytesRead实际读取字节数,被读取的缓存区对象 */var fs=require('fs');var path=require('path');var file1=path.resolve('/test1/one.txt');fs.open(file1,'r',function(err,fd){ if(err) return console.error(err); var buffer=new Buffer(255); //每一个汉字utf8编码是3个字节,英文是1个字节 fs.read(fd,buffer,0,9,3,function(err,bytesRead,buffer){ if(err) throw err; console.log(bytesRead); // 9 console.log(buffer.slice(0,bytesRead).toString()); // 三个汉字 ‘是一段’ //读取完后,再使用fs读取时,基点是基于上一次读取位置计算; fs.read(fd,buffer,0,6,null,function(err,bytesRead,buffer){ console.log(bytesRead); // 6 console.log(buffer.slice(0,bytesRead).toString()); // 两个汉字 '通过' }); });});3. fs.close(fd, callback) 关闭文件
var fs = require('fs');var buf = new Buffer(1024);var path = require('path');var file1 = path.resolve('/test1/one.txt');//打开文件fs.open(file1, 'r+', function(err, fd) { if (err) return console.error(err); //读取文件 fs.read(fd, buf, 0, buf.length, 0, function(err, bytes) { if (err) console.log(err); //仅输出独处的字节 if (bytes > 0) { console.log(buf.slice(0, bytes).toString()); } //关闭文件 fs.close(fd, function(err) { if (err) console.log(err); console.log('文件关闭成功'); }); });});4. fs.ftruncate(fd, len, callback) 截取文件 /** *fd - 通过 fs.open() 方法返回的文件描述符。 *len - 文件内容截取的长度。 *callback - 回调函数,没有参数。 */
var fs=require('fs');var buf=new Buffer(1024);var path=require('path');var file1=path.resolve('/test1/one.txt');//打开文件fs.open(file1,'r+',function(err,fd){ if(err) return console.error(err); //截取文件 fs.ftruncate(fd,6,function(err){ if(err) return console.error(err); //读取文件 fs.read(fd,buf,0,buf.length,0,function(err,bytes){ if(err) return console.error(err); //输出读取的字节 if(bytes>0){ console.log(buf.slice(0,bytes).toString()); } //关闭文件 fs.close(fd,function(err){ if(err) console.log(err); console.log('关闭文件成功!'); }); }); });});
flags 参数可以是以下值:
Flag | 描述 |
---|---|
r | 以读取模式打开文件。如果文件不存在抛出异常。 |
r+ | 以读写模式打开文件。如果文件不存在抛出异常。 |
rs | 以同步的方式读取文件。 |
rs+ | 以同步的方式读取和写入文件。 |
w | 以写入模式打开文件,如果文件不存在则创建。 |
wx | 类似 'w',但是如果文件路径存在,则文件写入失败。 |
w+ | 以读写模式打开文件,如果文件不存在则创建。 |
wx+ | 类似 'w+', 但是如果文件路径存在,则文件读写失败。 |
a | 以追加模式打开文件,如果文件不存在则创建。 |
ax | 类似 'a', 但是如果文件路径存在,则文件追加失败。 |
a+ | 以读取追加模式打开文件,如果文件不存在则创建。 |
ax+ | 类似 'a+', 但是如果文件路径存在,则文件读取追加失败。 |
转载地址:http://yyogi.baihongyu.com/