官方文档:node.js文件操作
读取文件
fs.readFile(path[, options], callback)
[]表示可选
具体选项可参考文档fs.readFile
const fs = require('fs');
fs.readFile('hello.txt',{
flag:'r',encoding:'utf-8'},function(err,data) {
if(err) {
console.log(err);
}else {
console.log(data);
}
})
问题:如果想要读取多个文件,则这样写需要写很多条。
解决:封装成一个Promise对象
hello.txt
hello2
hello2.txt
hello3
hello3.txt
content
function fsRead(path) {
return new Promise(function(resolve,reject) {
fs.readFile(path,{
flag:'r',encoding:'utf-8'},function(err,data) {
if(err) {
reject(err);
}else {
resolve(data);
}
})
})
}
const w1 = fsRead('hello.txt');
w1.then(function(res) {
console.log(res);//hello2
})
async function ReadList() {
let file2 = await fsRead('hello.txt');
let file3 = await fsRead(file2 + '.txt');
let finall = await fsRead(file3 + '.txt');
console.log(finall);//content
}
ReadList();
写入文件
写入与读取类似
fs.writeFile(file, data[, options], callback)
具体文档:fs.writeFile
对于flag的取值:
flag:‘w’(打开文件进行写入。 创建(如果它不存在)或截断(如果它存在)该文件。)
flag:‘r’(打开文件进行读取。 如果文件不存在,则会发生异常。)
flag:‘a’(打开文件进行追加。 如果文件不存在,则创建该文件。)
具体事例:
const fs = require('fs');
// fs.writeFile('test.txt','第一次写入\n',{flag:'w',encoding:'utf-8'},function(err) {
// if(!err) {
// console.log('写入成功');
// }
// })
function fsWrite(path,content) {
return new Promise(function(resolve,reject) {
fs.writeFile(path,content,{
flag:'a',encoding:'utf-8'},function(err) {
if(!err) {
resolve(err);
}
})
})
}
//这里对同一个文件进行写入flag值为a,如果为w则直接覆盖了而不是追加内容
async function writeList() {
await fsWrite('1.txt','第一行\n');
await fsWrite('1.txt','第二行\n');
await fsWrite('1.txt','第三行\n');
await fsWrite('1.txt','第四行\n');
}
writeList();
附加:
buffer:参考文档
/** * buffer在内存空间开辟出固定大小的内存 */
// let str = 'hello world';
// let buf = Buffer.from(str);
// console.log(buf.toString());
//开辟一个空的buffer
let buf1 = Buffer.alloc(10);
//安全但是相对于下面的方法效率低
buf1[0] = 255;
console.log(buf1);
//<Buffer ff 00 00 00 00 00 00 00 00 00>
let buf2 = Buffer.allocUnsafe(10);
//以这种方式创建的 Buffer 实例的底层内存不会被初始化
//不安全但是效率高
console.log(buf2);
//<Buffer 11 d7 5f c0 01 69 6d 69 11 25>