IT评测·应用市场-qidao123.com
标题:
Node.js - 文件操作
[打印本页]
作者:
李优秀
时间:
2025-1-5 12:45
标题:
Node.js - 文件操作
1. 文件写入
文件写入是计算机非常常见的操作,下载文件,安装软件,保存程序日志,视频录制等都利用到了
1.1 异步写入
const fs = require("fs");
// 写入文件
fs.writeFile('./sentence.txt', "Hello world", error => {
if (error) {
console.log("This is failed");
return;
} else {
console.log("Success");
}
});
复制代码
1.2 同步写入
根据代码次序逐行去实验
fs.writeFileSync('./text.text','输入的文本');
复制代码
1.3 流式写入
流式操作适合处理大文件,避免一次性将文件加载到内存中。
通过写入流对象举行文件的操作处理
//1. 导入fs
const fs = require('fs');
//2. 创建写入流对象
const ws = fs.createWriteStream('text.txt');
ws.write("Hello world");
ws.write("This is my server");
//3. 关闭通道
ws.close();
复制代码
2. 文件读取
文件读取的场景多种多样,包括电脑开机,程序运行,编辑器打开文件,播放视频,git检察日志等,检察聊天记录
2.1 异步读取
异步读取传入回调函数,传入错误和数据,实验完对应的文件操作后实验回调函数
const fs = require("fs");
fs.readFile("./sentence.txt",(err,data)=>{
if(err){
console.log("This is an error");
return;
}
console.log(data.toString());
});
复制代码
2.2 同步读取
根据代码次序逐行实验
let data = fs.readFileSync("sentence.txt");
console.log(data);
复制代码
2.3 流式读取
将文件分块,逐块读取,利用on绑定变乱,调用回调函数,传入参数chunk,意为块,现实上就是原文件分为的块状文件,每一块内存64k
const rs = fs.createReadStream("video.mp4");
rs.on('data',chunk=>{console.log(chunk,chunk.length);})
复制代码
end可选变乱,读取完毕后调用回调函数
rs.on('end',()={console.log("读取完毕");})
复制代码
3. 文件追加
3.1 异步追加
追加方式与写入方式一致,实验函数名不一致
fs.appendFile('example.txt', '\nNew content added!', (err) => {
if (err) {
console.error('Error appending to file:', err);
return;
}
console.log('Content appended successfully!');
});
复制代码
3.2 同步追加
try {
fs.appendFileSync('example.txt', '\nNew content added!');
console.log('Content appended successfully!');
} catch (err) {
console.error('Error appending to file:', err);
}
复制代码
4. 删除文件
4.1 异步删除
fs.unlink('example.txt', (err) => {
if (err) {
console.error('Error deleting file:', err);
return;
}
console.log('File deleted successfully!');
});
复制代码
4.2 同步删除
try {
fs.unlinkSync('example.txt');
console.log('File deleted successfully!');
} catch (err) {
console.error('Error deleting file:', err);
}
复制代码
5. 复制文件
5.1 readfile操作
const fs = require('fs');
let data = fs.readFileSync('sentence.txt');
fs.writeFileSync('sentence1.txt',data);
复制代码
5.2 流式操作
fs = require('fs');
//流式操作
const rs = fs.createReadStream("sentence.txt"); //创建流式读取器
const ws = fs.createWriteStream("sentence3.txt"); //创建流式写入器
rs.on('data',chunk=>{ws.write(chunk)})
复制代码
5.3 利用管道
流式读取之后通过管道举行流式写入
rs.pipe(ws);
复制代码
6. 文件重定名与移动
重定名的利用方法:
fs.rename(原有路径,新路径,回调函数)
复制代码
const fs = require('fs');
fs.rename("name1.txt","name2.txt",err=>{
if (error) {console.log("This is an error");return}
console.log("修改成功");
})
复制代码
7. 文件夹操作
7.1 创建文件夹
不含有sync都默认利用异步方法,文件夹创建函数为mkdir
const fs = require('fs');
fs.mkdir('./html',err=>{
if (err){
console.log('error');
return;
}
console.log('创建成功')
})
复制代码
7.2 递归创建
recursive:true表现如果路径中某个文件夹不存在,会递归创建全部必须的文件夹
const fs = require('fs');
fs.mkdir('./html/vue',{recursive:true},err=>{
if (err){
console.log('error');
return;
}
console.log('创建成功')
})
复制代码
7.3 读取文件夹
fs.readdir('../资源',(err,data)=>{
if (err){console.log("error");return}
console.log(data) //获取当前文件夹中内容
})
复制代码
7.4 删除文件夹
fs.rmdir('../资源',(err)=>{
if (err){console.log("error");return}
})
复制代码
7.5 递归删除
fs.rm('../资源',{recursive:true},(err)=>{
if (err){console.log("error");return}
})
复制代码
8. 检察资源状态
8.1 异步获取
const fs = require('fs');
fs.stat('./资料',(error,data)=>{
if (error) {console.log("This is an error");return;}
console.log(data) //查看相关信息
})
复制代码
8.2 同步获取
try {
const stats = fs.statSync('example.txt');
console.log('File stats:', stats);
} catch (err) {
console.error('Error getting file stats:', err);
}
复制代码
9. path模块
path模块是Node.js中一个内置模块,用于处理和操作文件路径。它提供了一系列实用方法,能够高效地解析、格式化、拼接和规范化路径。
const path = require("path")
复制代码
· 获取文件名
获取文件名(包括拓展名)
const filePath = '/home/user/documents/file.txt';
console.log(path.basename(filePath)); // 输出: 'file.txt'
console.log(path.basename(filePath, '.txt')); // 输出: 'file'
复制代码
· 拼接路径
resolve拼接规范的绝对路径
const path = require("path")
console.log(path.resolve(__dirname,'./text.txt'));
复制代码
__dirname
复制代码
是Node.js提供的全局变量,表现当前模块文件地点的目次路径
console.log(__dirname);
// 假设文件位于 /home/user/project/index.js
// 输出: /home/user/project
复制代码
· 路径分割
path.sep获取操作体系的路径分隔符
console.log(path.sep);
复制代码
· 路径解析
path.parse解析路径并返回对象
console.log(path.extname(str));
复制代码
const filePath = '/home/user/documents/file.txt';
console.log(path.parse(filePath));
/*
输出:
{
root: '/',
dir: '/home/user/documents',
base: 'file.txt',
ext: '.txt',
name: 'file'
}
*/
复制代码
· 路径格式化
格式化为字符串
const pathObject = {
root: '/',
dir: '/home/user/documents',
base: 'file.txt',
ext: '.txt',
name: 'file'
};
console.log(path.format(pathObject)); // 输出: '/home/user/documents/file.txt'
复制代码
· 路径目次名
path.dirname获取路径的目次名
const filePath = '/home/user/documents/file.txt';
console.log(path.dirname(filePath)); // 输出: '/home/user/documents'
复制代码
console.log(path.dirname(str));
//输出:所在目录的路径
复制代码
· 文件拓展名
path.extname获取路径的扩展名
const filePath = '/home/user/documents/file.txt';
console.log(path.extname(filePath)); // 输出: '.txt'
复制代码
console.log(path.extname(str));
//eg:输出:js
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4