文件操作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);
//