(1)步骤:
(2)两个函数
(3)示例:新建一个文件,座右铭.txt,写入内容:三人行,则必有我师焉
//1. 导入fs模块
const fs = require('fs');
//2.写入文件
fs.writeFile('座右铭.txt','三人行,则必有我师焉',err => {
//err有值,是个错误对象
if(err){
console.log(err);
console.log('写入失败');
return;
}
console.log('chengg')
});
//异步写入:writeFileSync参数和writeFile参数基本一样,就是没有最后一个回调函数参数,异步写入效率更高
fs.writeFileSync('data.txt','测试');
appendFile() / appendFileSyn() : 参数同上
//1. 引入fs模块
const fs = require('fs');
//2. 调用 appendFile
let str = '则其善者而从之,其不善者而改之';
fs.appendFile('座右铭.txt',str,err => {
if(err){
console.log("错误");
return;
}
console.log('成功');
});
//3. writeFile() 也可以追加写入,通过配置对象{flag:'a'}
let str1 = ',\r\n温故而知新,可以为师矣!';
fs.writeFile('座右铭.txt',str1,{flag:'a'},err => {
if(err){
console.log(err);
return;
}
console.log('成功!');
})
更适合写入频次较高的场景,也适合大文件的写入。
//1. 导入
const fs = require('fs');
//2. 创建一个写入流对象
//相当于和文件建立了一个通道,什么时候想写入内容,传入内容即可
const ws = fs.createWriteStream('观书有感.txt');
//3. 写内容
ws.write('半亩方塘一鉴开\r\n');
ws.write('天光云影共徘徊\r\n');
ws.write('问渠哪得清如许\r\n');
ws.write('为有源头活水来\r\n');
//4. 关闭通道
ws.close();
【文件写入应用场景】
【总结】当需要持久化保存数据的时候,应该想到文件写入。
//1. 引入fs模块
const fs = require('fs');
//2. 创建读取流
//createReadStream 接受路径参数
const rs = fs.createReadStream('附件.pdf');
//3. 为读取流对象绑定data事件,用于获取读取到的数据
//chunk:块儿 即读取到的数据块
//每读取一次,回调函数就会执行一次
rs.on('data',chunk => {
console.log(chunk);
console.log(chunk.length); // 每次最多读取65536字节 => 64KB
});
//4. end 可选事件,不一定非要绑定
//当读取流读取完所有的内容之后,会触发 end 事件
rs.on('end', () => {
console.log("读取完成!");
})
//需求:复制 附件.pdf 文件
//方式一:readFile
const fs = require('fs');
let data = fs.readFileSync('附件.pdf');
//写入文件
fs.writeFileSync('附件副本.pdf',data);
//方式二:流式操作
const rs = fs.createReadStream('附件.pdf');
const ws = fs.createWriteStream('附件2.pdf');
rs.on('data',chunk => {
ws.write(chunk);
})
//方式二可以直接简写
rs.pipe(ws);
const fs = require('fs');
fs.rename('./座右铭.txt','./论语.txt',err => {
if(err){
console.log(err);
return;
}
console.log("成功");
})
//1. 引入fs模块
const fs = require('fs');
2. unlink方法删除
fs.unlink('./附件2.pdf',err => {
if(err){
console.log("删除出错");
return;
}
console.log("成功");
})
//3. rm方法删除 nodejs 14.4引入的新方法
fs.rm('./附件副本.pdf',err => {
if(err){
console.log("删除出错");
return;
}
console.log("成功");
})
//1. 导入fs模块
const fs = require('fs');
//2. 创建文件夹
//-----------1)创建一个单独的文件夹
fs.mkdir('./新文件夹',err=> {
if(err){
console.log("失败!");
return;
}
console.log("创建成功!");
})
//----------2)递归创建
fs.mkdir('./a/b/c',{recursive:true},err=> {
if(err){
console.log("失败!");
return;
}
console.log("创建成功!");
})
//3. 读取文件夹
fs.readdir('../nodejs_code',(err,data) => {
if(err){
console.log("读取错误");
return;
}
console.log(data);
})
//4. 删除文件夹
//递归删除:建议使用rm()
fs.rm('./a',{recursive:true},err => {
if(err){
console.log("错误");
return;
}
console.log("成功");
})
//1. 导入
const fs = require('fs');
//2. 查看资源状态
fs.stat('./观书有感.txt',(err,data) => {
if(err){
console.log("出错");
return;
}
// console.log(data);
//isFile() 查看资源是不是文件类型,返回值是布尔型
console.log(data.isFile());
//isDirectory() 检测目标资源是不是文件夹
console.log(data.isDirectory());
})
fs模块相对路径参照物:不是js文件的所在目录,而是命令行的工作目录。
fs.writeFileSync('./index.html','love');
// ./ 当前目录指的是命令行的工作目录
可以理解为全局变量,始终保存所在文件的所在目录的绝对路径。
fs.writeFileSync(__dirname + '/index.html','love');
//需求:吧0-9前面加0
//1. 导入fs模块
const fs = require('fs');
//2. 读取文件夹
const files = fs.readdirSync('./');
//3. 遍历数组
files.forEach(item => {
//判断第一位是否小于10
let data = item.split('-');
//解构赋值
let [index,name] = data;
if(Number(index) < 10 && Number(index) != NaN){
name = "0" + index + '-' + name;
fs.renameSync(`./${item}`,`./${name}`);
}
})