当前位置:网站首页>05_Node js 文件管理模块 fs
05_Node js 文件管理模块 fs
2022-06-30 09:50:00 【全栈程序员站长】
一、fs 基础方法:
- fs.stat 检测是文件还是目录。
- fs.mkdir 创建目录。
- fs.writeFile 创建写入文件。
- fs.appendFile 追加文件。
- fs.readFile 读取文件(异步)。
- fs.readFileSync 读取文件(同步)。
- fs.readdir 读取目录。
- fs.rename 重命名。
- fs.rmdir 删除目录。
- fs.unlink 删除文件。
1、fs.stat:检测是文件还是目录
fs.js
const fs = require("fs");
fs.stat('fs.js', (error, stats) => {
if (error) {
console.log(error);
return false;
} else {
console.log(stats);
console.log(`文件:${stats.isFile()}`); // 文件:true
console.log(`目录:${stats.isDirectory()}`); // 目录:false
return false;
};
});
复制代码执行 node fs.js。
console.log(stats):
{ dev: 636204,
mode: 33206,
nlink: 1,
uid: 0,
gid: 0,
rdev: 0,
blksize: undefined,
ino: 1407374883609714,
size: 242,
blocks: undefined,
atime: 2018-12-25T09:14:40.866Z,
mtime: 2019-01-15T09:18:06.561Z,
ctime: 2019-01-15T09:18:06.561Z,
birthtime: 2018-12-25T09:14:40.866Z }
console.log(`文件:${stats.isFile()}`); // 文件:true
console.log(`目录:${stats.isDirectory()}`); // 目录:false
复制代码补充:
- stats.isFile() 如果是文件返回 true,否则返回 false。
- stats.isDirectory() 如果是目录返回 true,否则返回 false。
- stats.isBlockDevice() 如果是块设备返回 true,否则返回 false。
- stats.isCharacterDevice() 如果是字符设备返回 true,否则返回 false。
- stats.isSymbolicLink() 如果是软链接返回 true,否则返回 false。
- stats.isFIFO() 如果是FIFO,返回true,否则返回 false,FIFO是UNIX中的一种特殊类型的命令管道。
- stats.isSocket() 如果是 Socket 返回 true,否则返回 false。
2、fs.mkdir:创建目录
fs.js
const fs = require("fs");
fs.mkdir('images', (err) => {
if (err) {
console.log(err);
return false;
} else {
console.log("目录创建成功!");
};
});
复制代码接收参数:
- path:将创建的目录路径。
- mode:目录权限(读写权限),默认 0777。
- callback:回调,传递异常参数 err。
执行 node fs.js。
会发现目录下多了一个 images 文件夹。
3、fs.rmdir:删除目录
fs.js
const fs = require("fs");
fs.rmdir('images', (err) => {
if (err) {
console.log(err);
return false;
} else {
console.log("目录删除成功!");
};
});
复制代码执行 node fs.js。
会发现目录下 images 文件夹被删除。
4、fs.writeFile:创建写入文件
fs.js
const fs = require("fs");
fs.writeFile("index.js", "hello NodeJS!", (err) => {
if (err) {
console.log(err);
return false;
} else {
console.log("文件写入成功!");
};
});
复制代码接收参数:
- filename (String) 文件名称。
- data (String | Buffer) 将要写入的内容,可以是字符串或者 buffer 数据。
- encoding (String) 可选。默认 ‘utf-8’,当 data 是 buffer 时,该值应该为 ignored。
- mode (Number) 文件读写权限,默认 438。
- flag (String) 默认值 ‘w’。
- callback { Function } 回调,传递一个异常参数 err。
执行 node fs.js。
会发现目录下多了一个 index.js 文件夹,并且添加了“hello NodeJS!”的内容。
注意,这样的写入,是清空原文件中的所有数据,然后添加“hello NodeJS!”这句话,即:存在即覆盖,不存在即创建。
5、fs.unlink:删除文件
fs.js
const fs = require("fs");
fs.unlink("index.js", (err) => {
if (err) {
console.log(err);
return false;
} else {
console.log("删除成功!");
};
});
复制代码执行 node fs.js。
会发现目录下 index.js 文件被删除。
6、fs.appendFile:追加文件
fs.js
const fs = require("fs");
fs.appendFile("index.js", "追加的内容", (err) => {
if (err) {
console.log(err);
return false;
} else {
console.log("追加成功!");
};
});
复制代码执行 node fs.js。
会发现目录下 index.js 文件后有追加了一段话“追加的内容”。
7、fs.readFile:读取文件
fs.js
const fs = require("fs");
fs.readFile("index.js", (err, data) => {
if (err) {
console.log(err);
return false;
} else {
console.log("读取文件成功!");
console.log(data); // <Buffer 68 65 6c 6c 6f 20 4e 6f 64 65 4a 53 ef bc 81 e8 bf bd e5 8a a0 e7 9a 84 e5 86 85 e5 ae b9>
};
});
复制代码执行 node fs.js。
console.log(data) 打印结果:
<Buffer 68 65 6c 6c 6f 20 4e 6f 64 65 4a 53 ef bc 81 e8 bf bd e5 8a a0 e7 9a 84 e5 86 85 e5 ae b9>
复制代码8、fs.readdir:读取目录
fs.js
const fs = require("fs");
fs.readdir("node_modules", (err, data) => {
if (err) {
console.log(err);
return false;
} else {
console.log("读取目录成功!");
console.log(data); // [ '03_tool_multiply.js', 'my_module' ]
};
});
复制代码执行 node fs.js。
console.log(data) 打印结果:
[ '03_tool_multiply.js', 'my_module' ]
复制代码9、fs.rename:重命名
fs.js
const fs = require("fs");
fs.rename("index.js", "new_index.js", (err) => {
if (err) {
console.log(err);
return false;
} else {
console.log("重命名成功!");
};
});
复制代码执行 node fs.js。
会发现目录下 index.js 文件被修改为 new_index.js。
10、补充:fs.rename 还可以剪切
fs.js
const fs = require("fs");
fs.rename("new_index.js", "node_modules/new_index.js", (err) => {
if (err) {
console.log(err);
return false;
} else {
console.log("剪切成功!");
};
});
复制代码执行 node fs.js。
会发现目录下 new_index.js 文件被移动到了 node_modules 目录下。
二、fs 案例
1、判断是否有 upload 目录
fsDemo.js
const fs = require("fs");
fs.stat("upload", (err, stats) => {
if (err) {
// 如果没有,创建 upload 目录
fs.mkdir("upload", (err) => {
if (err) {
console.log(err);
return false;
} else {
console.log("创建成功!");
};
})
} else {
console.log(stats.isDirectory()); // true
console.log("有 upload 目录,你可以做更多操作!");
};
});
复制代码执行 fsDemo.js。
打印结果:
console.log(stats.isDirectory()); // true
有 upload 目录,你可以做更多操作!
复制代码2、读取目录全部文件
fsDemo.js
const fs = require("fs");
fs.readdir("../05fs/", (err, files) => {
if (err) {
console.log(err);
return false;
} else {
console.log(files);
let filesArr = [];
(function getFile(i) {
// 循环结束
if (i == files.length) {
// 打印出所有目录
console.log("目录");
console.log(filesArr);
return false;
};
// 判断目录是文件还是文件夹
fs.stat("../05fs/" + files[i], (err, stats) => {
if (stats.isDirectory()) {
filesArr.push(files[i]);
};
// 递归调用
getFile(i + 1);
});
})(0);
};
});
复制代码执行 fsDemo.js。
打印结果:
[ 'fs.js', 'fsDemo.js', 'fsStream.js', 'upload' ]
目录
[ 'upload' ]
复制代码三、fs 流
1、fs 流及其读取
首先创建一个 index.js 文件,并添加测试文本。
fsStream.js
const fs = require("fs");
// 流的方式读取文件
const fileReadStream = fs.createReadStream("index.js");
// 读取次数
let count = 0;
// 保存数据
let str = "";
// 开始读取
fileReadStream.on("data", (chunk) => {
console.log(`${++count} 接收到:${chunk.length}`);
str += chunk;
});
// 读取完成
fileReadStream.on("end", () => {
console.log("结束");
console.log(count);
console.log(str);
});
// 读取失败
fileReadStream.on("err", (err) => {
console.log(err);
});
复制代码执行 fsStream.js。
打印结果:
1 接收到:18
结束
1
fs 流及其读取
复制代码2、流的写入
fsStream.js
const fs = require("fs");
let data = "存入数据...";
// 创建一个可以写入的流,写入到 index.js
let fileWriteStream = fs.createWriteStream("index.js");
// 开始写入
fileWriteStream.write(data, "utf8");
// 写入完成
fileWriteStream.end();
fileWriteStream.on("finish", () => {
console.log("写入完成!");
});
复制代码执行 fsStream.js。
打开 index.js 文件,发现里面内容变成了“存入数据…”。
打印结果:
写入完成!
复制代码以上我们就通过流的形式进行了读取和写入的操作。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/101118.html原文链接:https://javaforall.cn
边栏推荐
- 【Rust日报】2021-01-23 几个新库发布
- The AOV function of R language was used for repeated measures ANOVA (one intra group factor and one inter group factor) and interaction Plot function and boxplot to visualize the interaction
- CSDN博客运营团队2022年H1总结
- mysql数据库基础:约束、标识列
- Es common curl finishing
- 戴森设计大奖,以可持续化设计改变世界
- Gd32 RT thread DAC driver function
- 新冠无情人有情,芸众惠爱心善举暖人间——捐赠商丘市儿童福利院公益行动
- 孙安民作品《莲花净心》数字藏品上线长城数艺
- MySQL index, transaction and storage engine of database (2)
猜你喜欢

L'activité "Kunming City coffee map" a rouvert

WGet -- 404 not found due to spaces in URL

ArcGIS Pro脚本工具(5)——排序后删除重复项

Get through the supply chain Shenzhen gift show helps cross-border e-commerce find ways to break the situation
[email protected] somatosensory manipulator"/>Skill combing [email protected] somatosensory manipulator

MySQL advanced SQL statement of database (2)

Musk has more than 100 million twitter fans, but he has been lost online for a week

CVPR 2022 | Tsinghua & bytek & JD put forward BRT: Bridging Transformer for vision and point cloud 3D target detection

What is the real performance of CK5, the king machine of CKB?

Basic MySQL operation commands of database
随机推荐
MIT-6874-Deep Learning in the Life Sciences Week5
Koreano essential creates a professional style
GD32 RT-Thread RTC驱动函数
Robot system dynamics - inertia parameters
ArcGIS Pro脚本工具(6)——修复CAD图层数据源
[AGC] build service 3- authentication service example
Notes on numerical calculation - iterative solution of linear equations
MySQL index, transaction and storage engine of database (1)
R语言aov函数进行重复测量方差分析(Repeated measures ANOVA、其中一个组内因素和一个组间因素)、分别使用interaction.plot函数和boxplot对交互作用进行可视化
Detailed explanation of commissioning methods and techniques
MySQL log management, backup and recovery of databases (1)
Configure Yii: display MySQL extension module verification failed
GNN hands on practice (II): reproduction graph attention network gat
Koreano essential creates a professional style
R语言plotly可视化:使用plotly可视化多分类模型的预测置信度、模型在2D网格中每个数据点预测的置信度、置信度定义为在某一点上最高分与其他类别得分之和之间的差值
Node environment configuration
“昆明城市咖啡地图”活动再度开启
I found a wave of "alchemy artifact" in the goose factory. The developer should pack it quickly
Yixian e-commerce released its first quarterly report: adhere to R & D and brand investment to achieve sustainable and high-quality development
R language plot visualization: use plot to visualize the prediction confidence of the multi classification model, the prediction confidence of each data point of the model in the 2D grid, and the conf