常见方法(文件打开,读,写和文件追加,删除)

文件操作flags

  • r 以读的形式打开文件,文件不存在就抛异常
  • r+ 以读和写的形式打开文件,文件不存在就抛异常
  • rs+ 以同步的读和写形式打开文件,通知操作系统忽略系统缓存(不推荐使用)
  • w 以写的形式打开文件,如果文件不存在就创建,存在就覆盖
  • wx 与w形式类似,只不过文件存在时操作会失败
  • w+ 以读和写的形式打开文件,如果文件不存在就创建,存在就覆盖
  • a 以追加的形式打开文件,如果文件不存在就创建
  • ax 与a类似,如果文件存在操作会失败
  • a+ 以读和写的形式打开文件,如果文件不存在就创建
  • ax+ 与a+类似,如果文件存在操作会失败

打开文件(open)

/*
  文件操作 fs.open(path, flags[,mode], callback);
  path   --- 文件的路径
  flags  ---  打开文件的方式
  mode   --- Linux平台有效,可以控制文件的读、写、可执行 777,参数是可选的
  callbacl  --- 回调函数(err, fd)
*/
const path = require('path');
const fs = require('fs');
 异步方法
fs.open(path.join(__dirname,'./data.txt'),'r', (err ,fd) => {
  // fd file discriptor
  // 文件描述符,通过 fd 可以操作文件,默认从 3 开始,打开多次接着累加
  if (err) {
    console.log('错误');
    return;
  }else {
    console.log(err, fd);
  }
})
//  同步方法
// 同步方法的返回值表示fd
let ret = fs.openSync(path.join(__dirname,'./data.txt'), 'r');
console.log(ret);

读文件(read)

简单写法
/*
  文件读操作
  fs.readFile(file[, options], callback);
  file      ---   表示文件名称或者文件描述符
  options   ---   可以是字符串形式,表示编码, 可以是对象形式
  callback  ---   回调函数(err, data 实际读取的数据)
  注意:
  如果第二个参数指定编码,回调函数中的data是字符串,不指定的是Buffer
  fs.readFileSync(file[, options]);
*/
const path = require('path');
const fs = require('fs');
// 异步方法
// 方法一
fs.readFile(path.join(__dirname, './data.txt'), (err, data) => {
  console.log(data.toString());
})
// 方法二
// fs.readFile(path.join(__dirname, './data.txt'), 'utf8',(err, data) => {
//   console.log(data);
// })
// 同步方法
// let content = fs.readFileSync(path.join(__dirname, './data.txt'));
// let content = fs.readFileSync(path.join(__dirname, './data.txt'), 'utf8');
// console.log(content);
原始写法(需要buffer,将读到的内容放到buffer里面,open里面嵌套read)
/*
 文件读写操作
 fs.read(fd, buffer, offset, length, position, callback);
 fd        --- 文件描述符
 buffer    --- 读取的数据放到buffer中
 offset    --- 读取的数据从buffer的第几个位置开始写
 length    --- 读取文件中数据的字节数量
 position  --- 从文件的什么位置开始读
 callback  --- 回调函数(err, bytes)
*/
// 异步方法
const path = require('path');
const fs = require('fs');
// 00 00 00 00 00
fs.open(path.join(__dirname,'data.txt'), 'r', (err, fd) => {
    let buf = Buffer.alloc(5);
    fs.read(fd, buf, 1, 3, null, (err, bytes, buffer) => {
        console.log(err, bytes, buffer);
        console.log(buf);
        console.log(buf == buffer);
    })
})
// 同步方法
// let fd = fs.openSync(path.join(__dirname, './data.txt'),'r');
// let buf = Buffer.alloc(5);
// let ret = fs.readSync(fd, buf, 0, 3);
// console.log(ret, buf);

写文件(write会将之前的覆盖掉)

简单写法
/*
  文件写操作
  fs.writeFile(file, data[,options], callback);
  file      ---   表示文件名称或者文件描述符
  data      ---   写入的数据
  options   ---   可以是字符串形式,表示编码, 可以是对象形式
  callback  ---   回调函数(err, data 实际读取的数据)

*/
const path = require('path');
const fs = require('fs');

// 异步方法
fs.writeFile(path.join(__dirname, './data.txt'), '祖国万岁', 'utf8', (err) => {
  console.log(err);
})

// 同步方法
// fs.writeFileSync(path.join(__dirname,'./data.txt'),'葫芦娃');
原始写法(需要buffer,将buffer的内容写到文件里面,也可以不用buffer,open里面嵌套write)
 // 方法1:
//  fs.write(fd,buffer,offset,length[, position], callback);
//  fs.writeSync(fd, buffer, offset, length[,position]);
//  方法2:
//  fs.write(fd, data[, position[, encoding]], callback);
 // fs.writeSync(fd, data[,position[, encoding]])
const path = require('path');
const fs = require('fs');

// -------------------------- 异步方法 -----------------------------
// 方法一

// 方法重载,
fs.open(path.join(__dirname, './data.txt'), 'w', (err, fd) => {
  let buf = Buffer.from('abcdefe');
  // written 指的是字节数量,而不是字符数量, 中文在utf8, 3
  fs.write(fd, buf, 2, 4, (err, written, buffer) => {
    console.log(err, written, buffer);
    console.log(buf == buffer);
  })
})

// 方法二
fs.open(path.join(__dirname, './data.txt'), 'w', (err, fd) => {
  fs.write(fd, '程序员', (err, written, str) => {
    console.log(err, written, str);
  })
})
// --------------------- 同步方法 ---------------------------
// 方法一
// let fd = fs.openSync(path.join(__dirname, './data.txt'), 'w');
// let buf = Buffer.from('中国');
// let ret = fs.writeSync(fd, buf, 0, 6, null);
// console.log(buf);


// // 方法二
// let fd = fs.openSync(path.join(__dirname, './data.txt'), 'w');
// let ret = fs.writeSync(fd, '程序员');
// console.log(ret);
//

文件内容追加

/*
  文件内容追加
  fs.appendFile(file, data[, options], callback);
  file      ---   表示文件名称或者文件描述符
  data      ---   写入的数据
  options   ---   可以是字符串形式,表示编码, 可以是对象形式
  callback  ---   回调函数(err, data 实际读取的数据)-

  fs.appendFileSync(file, data[, options]);

*/
const path = require('path');
const fs = require('fs');
// 异步方法
fs.appendFile(path.join(__dirname, './data.txt'), '打奥特曼', (err) => {
  console.log(err);
})
 // 同步方法
// fs.appendFileSync(path.join(__dirname, './data.txt'),'打小怪兽');

删除文件

/*
  删除文件
  fs.unlink(path, callback);
*/
const path = require('path');
const fs = require('fs');
fs.unlink(path.join(__dirname,'./data1.txt'), (err) => {
  console.log(err);
})
// 不能删除目录
// fs.unlink(path.join(__dirname, './abc'), (err) => {
//   console.log(err);
// 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容