node
node-file
前提
-
引入模块
import fs from 'fs'; // 异步 import fsp from 'fs/promises'; // 可以通过promise做同步
1.创建文件夹
- 异步
// 创建文件夹的目录 ,如果有改文件夹报异常
fs.mkdir('./img', function (err) {
console.log(err);
});
- 同步方法
// 创建文件夹的目录 ,如果有改文件夹报异常
async function init() {
var err;
await fsp
.mkdir('./img')
.then()
.catch((err) => err);
}
2.删除文件夹
- 异步
// 删除文件夹的目录 ,如果没有该文件夹报异常
fs.rmdir('./img', function (err) {
console.log(err);
});
- 同步方法
// rmdirSync 是同步的 rmdir
fs.rmdirSync('./img', function (err) {
console.log(err);
});
3.读取目录和文件信息
- 异步方法
// stat信息对象
fs.stat('./js/Main.js', function (err, stat) {
console.log(err, stat);
console.log(stat.isFile()); // 判断是否是文件
console.log(stat.isDirectory()); // 判断是否是目录
});
- 同步方法
async function init() {
var stat = await fsp.stat('./js/Main.js');
if (stat.isFile()) {
// 如果是文件,则输出 1
console.log(1);
}
}
- 例
- 判断该路径是否是文件,下面例子是实用 ts 写的,冒号后边的是前面变量的数据类型
function judgeFile(_path: string): Promise<boolean | null> {
return new Promise((resolve, reject) => {
fs.stat(_path, (err: NodeJS.ErrnoException | null, stats: fs.Stats) => {
if (err) resolve(null);
else {
resolve(stats.isFile());
}
});
});
}
// 调用
async function init() {
var bool = await judgeFile('./img/');
console.log(bool);
}
3. 补 读取目录
- 返回值是目录数组
fs.readdir(path.resolve(),function(arr,file){
console.log(file)
/*[
'cheese.log',
'js',
'node_modules',
'package-lock.json',
'package.json',
'text',
'ts',
'tsconfig.json'
]*/
})
4.读取文件
- 当前根路径
path.resolve()
- 异步读取文件.注意地址中会有转义字符,所以\使用的时候要多敲一个
- 异步方法
- 方法一
fs.readFile('./text/a.txt', 'utf8', function (err, data) {
console.log(err);
console.log(data + '');
});
- 方法二
fs.readFile('./logs/log-0.txt', 'utf-8').then((result) => {
console.log(result);
});
- 同步读取
- 方法一
fs.readFileSync('E:\\test\\test10\\server\\config.json', 'utf8');
- 方法二
async function init() {
var txt = (await fsp.readFile('./text/a.txt')) + '';
console.log(txt);
}
5.将数据写入一个文件
- 如果文件中有数据就是替换,没有就是新增
- 异步写入
// 写入文件路径,写入内容
fs.writeFile('./text/c.txt', '1234567989', function (err) {
console.log(err);
});
- 同步写入
async function init() {
var bool = await fsp.writeFile('./text/c.txt', '77777777', 'utf8');
console.log(bool);
}
- 案例 *- 读取写入文件,案例
- 将一个文件夹中的文件,拷贝一份放入新创建的文件夹
async function init() {
//获取要拷贝的文件的目录
var list: Array<string> = await fsp.readdir('./text');
for (var i = 0; i < list.length; i++) {
// 读取每个文件中的内容
var data = (await fsp.readFile(path.join('./text/', list[i]), 'utf8')) + '';
// 判断是否有新建的文件夹,没有就新建一个
if (!(await judgeDir('./a'))) await fsp.mkdir('./a');
// 将新建的文件夹写入到新建的文件夹中
await fsp.writeFile(path.join('./a', list[i]), data, 'utf8');
}
}
// 判断是否是文件的方法,,上面有写过
function judgeDir(src: string): Promise<boolean> {
return new Promise(function (resolve, reject) {
fs.stat(src, function (err, stat) {
if (err) resolve(false);
else if (stat.isFile()) resolve(false);
else resolve(true);
});
});
}
6.追加
- 向文件尾部增加新数据,如果该文件不存在就会创建一个新文件
- 异步方法
fs.appendFile('./server/data/a.txt', '新增的内容', function (error) {
console.log(error);
});
- 同步方法
async function animation() {
fsp.appendFile('./text/a.txt', n.toString(), 'utf8');
}
- 案例,日志文件
- 这里需要用到一个模块 log4js
- 首先引入
import log4js from 'log4js';
- 首先引入
log4js.configure({
appenders: { cheese: { type: 'file', filename: 'cheese.log' } },
categories: { default: { appenders: ['cheese'], level: 'error' } },
});
// 写入日志文件的方法
var logger = log4js.getLogger('cheese');
logger.level = 'debug';
setInterval(function () {
logger.debug(path.resolve() + '---Main.ts---141');
}, 3000);
7.修改文件名
fs.rename('./text/a.txt', './text/ab.txt', function (err) {
console.log(err);
});
8.删除文件
fs.unlink('./text/ab.txt', function (err) {
console.log(err);
});
9.监听
fs.watch('./text/b.txt', 'utf8', function (event, filename) {
console.log(event, filename);
});
10.读取流和写入流
fs.createReadStream('./text/c.txt').pipe(fs.createWriteStream('./text/b.txt'));