文件操作
最后更新于:2022-04-02 03:30:59
[TOC]
## Buffer(数据块)
可用于操作二进制 字符串
```
var bin = new Buffer([ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]); //创建二进制字符串
var str = bin.toString('utf-8'); //二进制转utf8 => "hello"
var bin = new Buffer('hello', 'utf-8'); //utf转二进制 =>
```
## Stream(数据流)
处理大数据
## File System(文件系统)
```
文件属性读写: fs.stat、fs.chmod、fs.chown 等等。
文件内容读写:fs.readFile、fs.readdir、fs.writeFile、fs.mkdir 等等。
底层文件操作:fs.open、fs.read、fs.write、fs.close 等等。
```
nodejs 中使用异步来处理文件,通过回调函数,传递结果
1. 异步方法
```
fs.readFile(pathname, function (err, data) {
if (err) {
// Deal with error.
} else {
// Deal with data.
}
});
```
2. 同步方法
```
try {
var data = fs.readFileSync(pathname);
// Deal with data.
} catch (err) {
// Deal with error.
}
```
## Path(路径)
1. path.normalize 解析路径中的.与..外,还能去掉多余的斜杠
```
var path = require("path");
console.log(path.normalize('foo/bar')); //foo\bar
console.log(path.normalize('foo//baz//../bar'));; //foo\bar
```
> 在操作玩后需要用.replace(/\\/g, '/'),可是window 下的路径也是`/`
2. path.join 拼接目录
拼接目录,
```
var path = require("path");
path.join('foo/', 'baz/', '../bar'); // => "foo/bar"
```
3. path.extname 获取文件路径的后缀
```
path.extname('foo/bar.js'); // => ".js"
```
## 文本编码
1. BOM的移除
```
function readText(pathname) {
var bin = fs.readFileSync(pathname);
if (bin[0] === 0xEF && bin[1] === 0xBB && bin[2] === 0xBF) {
bin = bin.slice(3);
}
return bin.toString('utf-8');
}
```
3. GBK转UTF8
`npm install iconv-lite`
```
var iconv = require('iconv-lite');
function readGBKText(pathname) {
var bin = fs.readFileSync(pathname);
return iconv.decode(bin, 'gbk');
}
```
';