路径操作
获取路径的最后一部分
console.log(path.basename('/foo/bar/baz/adf/admin.html'));
// admin.html
返回文件的名称
console.log(path.basename('/foo/bar/baz/adf/admin.html', '.html'));
// admin
路径获取
// (H:\01-NodeJSCore\20200920Day01\02-授课源码\day01)
console.log(__dirname); // 输出当前 Demo3.js文件所在的文件路径
// 获取 路径地址 但是不包含文件
console.log(path.dirname('/abc/qqq/www/abc.txt'))
console.log(path.dirname('/abc/qqq/www/abc')); /abc/qqq/www
获取扩展名
console.log(path.extname('index.html')); .//html
路径的格式化
path.format() obj-->string
path.parse() string-->obj {key:value}
判断是否为绝对路径 (返回布尔类型)
console.log(path.isAbsolute('/foo/bar')); //true
console.log(path.isAbsolute('C:/foo/bar/..')); //true
拼接路径
..
表示的 上层 路径 .
表示当前路径
规范化路径
console.log(path.normalize('/foo/bar/baz/asdf/quux/..'));
// \foo\bar\baz\asdf
console.log(path.normalize('C:\\temp\\\\foo\\bar\\..\\'));
\\C:\temp\foo\
计算相对路径
console.log(path.relative('/data/orandea/test/aaa','/data/orandea/impl/bbb'));
// ..\..\impl\bbb
解析路径
console.log(path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif'));
// C:\Window\ystem32\wwwroot\static_files\gif\image.gif
两个特殊的属性
console.log(path.delimiter); // 环境变量 分割符 window 中使用; linux使用:
console.log(path.sep); //表示路径分隔符 windows中使用 \ linux中 使用 /
文件操作
fs
之stat
方法的操作:
fs.stat(path[, options], callback)
path
<string> | <Buffer> | <URL>options
<Object>bigint
<boolean> 返回的 fs.Stats 对象中的数值是否为bigint
型。 默认值:false
。
- callback <Function>
err
<Error>stats
<fs.Stats>
异步的 stat(2)。 回调有两个参数(err, stats)
,其中stats
是 fs.Stats 对象。
如果发生错误,则 err.code
会是常见的系统错误之一。
不建议在调用 fs.open()
、 fs.readFile()
或 fs.writeFile()
之前使用 fs.stat()
检查文件的存在性。 而是应该直接地打开、读取或写入文件,如果文件不可用,则处理引发的错误。
若要只检查文件是否存在,但没有更多的操作,则建议使用 fs.access()
。
//首先创建一个名叫data的text文件,随便写点东西
const fs = require('fs');
const path = require('path');
console.log(1);
fs.stat('./data', (err, stat) => {
// 一般回调函数中的第一个参数 是错误对象 如果为null 表示没有错误, 否则有错误
if (err) {
return
}
console.log(err);
// isFile() 判断是否是一个文件 如果是 则进入if 执行体
if (stat.isFile()) {
console.log('文件');
} else if (stat.isDirectory()) {
console.log('目录');
console.log(2)
}
// console.log(stat);
})
console.log(3)
/**
* atime 文件访问的时间
* ctime 文件的状态 信息 发生变化的时间
* mtime 文件数据 发生变化的时间
* birthtime 文件的创建时间
*/
// 同步的操作 比较耗时 后面的程序需要等待
console.log(4);
let ret = fs.statSync('./data.txt');
console.log(ret);
console.log(5);
读文件
let strpath = path.join(__dirname,'data.txt');
console.log(strpath);
fs.readFile(strpath,'utf8', (err, data) => {
if (err) return;
// console.log(data.toString());
console.log(data);
})
// 同步的操作:readFileSync()
写文件
let strpath_01 = path.join(__dirname, 'data.txt');
fs.writeFile(strpath_01, 'hello nihao', 'utf8', (err) => {
if (!err) {
console.log('写入文件成功....');
}
})
let buf = Buffer.from('hi');
fs.writeFile(strpath_01, buf, 'utf8', (err) => {
if (!err) {
console.log('写入文件成功....');
}
})
目录操作
/**
* 1, 创建目录 fs.mkdir()
* 2, 读取目录 fs.readdir()
* 3, 删除目录 fs.rmdir()
*/
const path = require('path');
const fs = require('fs');
创建目录
fs.mkdir(path.join(__dirname, 'abc'), (err) => {
console.log(err)
})
读取目录
fs.readdir(__dirname, (err, files) => {
console.log(files);
})
fs.readdir(__dirname, (err, files) => {
files.forEach((item, index) => {
// fs.stat()
fs.stat(path.join(__dirname, item), (err, stat) =>{
if (stat.isFile()) { // 判断 是文件
console.log(item,'文件');
} else if(stat.isDirectory()){ // 判断是 目录
console.log(item,'目录');
}
})
})
})
删除目录操作
fs.rmdir(path.join(__dirname, 'abc'), (err) => {
console.log(err);
})