/*
1. fs.stat 检测是文件还是目录(目录 文件是否存在)
2. fs.mkdir 创建目录 (创建之前先判断是否存在)
3. fs.writeFile 写入文件(文件不存在就创建,但不能创建目录)
4. fs.appendFile 写入追加文件
5.fs.readFile 读取文件
6.fs.readdir 读取目录
7.fs.rename 重命名
8. fs.rmdir 删除目录
9. fs.unlink 删除文件
同步方法在后面加上Sync, 比如fs.statSync
14. fs.existsSync 判断路径是否存在
*/
var fs = require('fs'); // fs是node.js的核心模块,不用下载安装,可以直接引入
// 1. fs.stat 检测是文件还是目录 fs.statSync()同步获取stats对象,通过返回值接收。
fs.stat('html', function (error, stats) {
if (error) {
console.log(error);
return false;
}
console.log('文件:' + stats.isFile());
console.log('目录:' + stats.isDirectory());
})
// 2. fs.mkdir 创建目录
fs.mkdir('css', function (error) {
if (error) {
console.log(error);
return false;
}
console.log('创建目录成功');
})
// 3. fs.writeFile 写入文件(会覆盖之前的内容)(文件不存在就创建) utf8参数可以省略
fs.writeFile('123.txt', '你好nodejs 覆盖', 'utf8', function (error) {
if (error) {
console.log(error);
return false;
}
console.log('写入成功');
})
// 4. fs.appendFile 追加文件
fs.appendFile('123.txt', '这是写入的内容\n', function (error) {
if (error) {
console.log(error);
return false;
}
console.log('写入成功');
})
// 5.fs.readFile 读取文件
fs.readFile('123.txt', function (error, data) {
if (error) {
console.log(error);
return false;
}
// console.log(data); // data是读取的十六进制的数据。 也可以在参数中加入编码格式"utf8"来解决十六进制的问题;
console.log(data.toString()); // 读取出所有行的信息
})
// 6.fs.readdir 读取目录下第一级内容 把目录下面的文件和文件夹都获取到。
fs.readdir('html', function (error, data) {
if (error) {
console.log(error);
return false;
}
console.log(data); // data是数组类型,包含文件夹以及文件的名字(只有第一级目录内容)。拿到一个文件夹下面的所有目录
})
// 7.fs.rename 重命名 1.改名 2.剪切文件(移动)
fs.rename('html/index.html', 'html/news.html', function (error) {
if (error) {
console.log(error);
return false;
}
console.log('修改名字成功');
})
// 8. fs.rmdir 删除目录 rmdir 这个方法只能删除目录,不能删除文件
fs.rmdir('abc目录', function (error) {
if (error) {
console.log(error);
return false;
}
console.log('删除目录成功');
})
// 9. fs.unlink删除文件
fs.unlink('index.txt', function (error) {
if (error) {
console.log(error);
return false;
}
console.log('删除文件成功');
})
// 10. fs.createReadStream 从文件流中读取数据,读取的文件比较大时建议用流的方式读取,文件比较大会多次读取。
var fileReadStream = fs.createReadStream('data1.json');
var str = '';
fileReadStream.on('data', (data) => {
console.log("接收到" + data.length); // 文件比较大时,会多次读取,多次执行该回调函数
str += data;
})
fileReadStream.on('end', () => {
console.log(" --- 结束 ---");
console.log(str);
})
fileReadStream.on('error', (error) => {
console.log(error)
})
// 11. fs.createWriteStream 写入文件流
var fs = require("fs");
var data = "我是从数据库获取的数据,我要保存起来";
var writerStream = fs.createWriteStream('output.txt');
writerStream.write(data, 'UTF8');
writerStream.end(); // 标记文件末尾 结束写入流,释放资源
writerStream.on('finish', function () {
console.log("写入完成。");
});
writerStream.on('error', function (error) {
console.log(error.stack);
});
console.log("程序执行完毕");
// 12. pipe 管道流
var fs = require("fs");
var readerStream = fs.createReadStream('input.txt');
var writerStream = fs.createWriteStream('output.txt');
readerStream.pipe(writerStream);
console.log("程序执行完毕");
// 13. fs.access 判断目录、文件是否存在(读写权限)
var fs = require('fs');
fs.access('package.json', (err) => {
console.log(err ? '目录/文件不存在' : '文件存在,可以进行读写');
});
// 14. fs.existsSync 判断路径是否存在, 存在返回 true, 否则返回 false
if (fs.existsSync('/etc/passwd')) {
console.log('文件已存在');
}
var path = require('path');
/**
* @deprecated 文件夹拷贝到某一个位置
*
* @param {String} src
* @param {String} dest
* @returns
*/
function CopyDirectory(src, dest) {
if (!fs.existsSync(src)) {
return false;
}
if (!fs.existsSync(dest)) {
fs.mkdirSync(dest);
}
// 拷贝新的内容进去
var dirs = fs.readdirSync(src);
dirs.forEach(function (item) {
var item_path = path.join(src, item);
var temp = fs.statSync(item_path);
if (temp.isFile()) { // 是文件
fs.copyFileSync(item_path, path.join(dest, item));
} else if (temp.isDirectory()) { // 是目录
CopyDirectory(item_path, path.join(dest, item));
}
});
}
/**
* @description 文件夹删除
*
* @param {String} dir
*/
function DeleteDirectory(dir) {
if (fs.existsSync(dir) == true) {
var files = fs.readdirSync(dir);
files.forEach(function (item) {
var item_path = path.join(dir, item);
if (fs.statSync(item_path).isDirectory()) {
DeleteDirectory(item_path);
} else {
fs.unlinkSync(item_path); // 删除文件
}
});
fs.rmdirSync(dir); // 删除文件夹
}
}