判断是文件还是文件夹
- 同步
// 引入文件系统模块
const fs = require('fs');
let pathName = "D:\file"
let stat = fs.lstatSync(pathName);
console.log(JSON.stringify(stat))
console.log('是否是文件:'+ stat.isFile()) //是文件吗
console.log('是否是文件夹:'+ stat.isDirectory()) //是文件夹吗
- 异步
const fs = require('fs');
let pathName = "E:\file"
fs.stat(pathName, function(err, data){
console.log('是否是文件:'+ data.isFile()) //是文件吗
console.log('是否是文件夹:'+ data.isDirectory()) //是文件夹吗
});
创建文件夹
- 同步
const fs = require('fs');
let pathName = "E:\file"
if(!fs.existsSync(pathName)) {
fs.mkdirSync(pathName);
}
- 异步
const fs = require('fs');
fs.mkdir(mypath, (err) => {
if(err) throw err; // 如果出现错误就抛出错误信息
console.log('文件夹创建成功');
})
创建多层目录
- 同步
const path = require("path");
const fs = require("fs");
let mypath = path.join(__dirname,"a","b","c","d");
if (!fs.existsSync(mypath)) {
fs.mkdirSync(mypath, { recursive: true });
}
- 异步
const path = require("path");
const fs = require("fs");
let mypath = path.join(__dirname,"a","b","c","d");
fs.mkdir(mypath, { recursive: true }, (err) => {
if (err) throw err;
});
获取文件所在文件夹
let filePath;//文件路径
path.resolve(filePath)
path.dirname(filePath, "..")
- path.resolve()
作用:path.resolve() 该方法将一些的 路径/路径段 解析为绝对路径。
语法:path.resolve( [from…],to )
说明:将参数to位置的字符解析到一个绝对路径里,[from … ]为选填项,路径源。
// __dirname当前目录, __filename当前文件绝对路径
//获取当前文件的 根目录
path.resolve(__dirname);
let path = require("path");
path.resolve('/foo/bar', './baz') => '/foo/bar/baz'
path.resolve('/foo/bar', 'baz') => '/foo/bar/baz'
path.resolve('/foo/bar', '/baz') => '/baz'
path.resolve('/foo/bar', '../baz') => '/foo/baz'
path.resolve('home','/foo/bar', '../baz') => '/foo/baz'
path.resolve('home','./foo/bar', '../baz') => '/home/foo/baz'
path.resolve('home','foo/bar', '../baz') => '/home/foo/baz'
path.resolve('home', 'foo', 'build','a1','a2','../../..', 'asset') => '/home/fo/asset'
path.resolve总是返回一个以相对于当前的工作目录(working directory)的绝对路径。
- path.dirname()
path.dirname() 返回目录名, 尾部的目录分隔符将被忽略
path.dirname('/foo/bar/baz/asdf/a.png') => '/foo/bar/baz/asdf'
拼接文件路径
const filepath = path.join(
"文件夹路径",
"_temp",
'文件名.png'
);
创建所有父级文件夹
let parent_folder = path.dirname(filepath)
try {
if (!fs.existsSync(parent_folder)) {
// 如果目录不存在,则递归创建目录
fs.mkdirSync(parent_folder, {recursive: true});
}
} catch (e) {
}
如果文件存在删除文件
if (fs.existsSync(filepath)) {
fs.unlinkSync(filepath);
}
删除文件夹及文件
var fs = require('fs'); // 引入fs模块
function deleteAll(path) {
var files = [];
if(fs.existsSync(path)) {
files = fs.readdirSync(path);
files.forEach(function(file, index) {
var curPath = path + "/" + file;
if(fs.statSync(curPath).isDirectory()) { // recurse
deleteAll(curPath);
} else { // delete file
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(path);
}
};
读取文件内容
- 同步
var fs=require("fs");
let mcontent=fs.readFileSync(filepath,"utf-8");
console.log(mcontent);
- 异步
var fs=require("fs");
fs.readFile(filepath,'utf-8',function(err,data){
if(err){
console.log("error");
}else{
console.log(data);
}
});
写入文件内容
fs.writeFileSync(filename,data,[options])
fs.writeFile(filename,data,[options],callback);
默认情况下,此API将替换文件的内容(如果已经存在)。
fs.writeFile('/Users/me/test.txt', content, { flag: 'a+' }, (err) => {})
参数说明
- filename:文件名
- data:需要写入的数据
- option:options参数值为一个对象,参数如下
-
- flag属性:用于指定对该文件采取何种操作,默认值为’w’(文件不存在时创建该文件,文件已存在时重写该文件),可指定值及其含义与readFile方法中使用的options参数值中的flag属性的可指定值及其含义相同。
- mode属性:用于指定当文件被打开时对该文件的读写权限,默认值为0666(可读写)。该属性值及fs模块中的各方法中的mode参数值的指定方法均如下所示:使用4个数字组成mode属性值或?mode参数值,其中第一个数字必须是0,第二个 数字用于规定文件或目录所有者的权限,第三个数字用于规定文件或目录所有者所属用户组的权限,第四个数字规定其他人的权限。可以设定的数字如下所示:
-
- 1:执行权限
- 2:写权限
- 4:读权限
-
-
encoding属性:用于指定使用何种编码格式来写入该文件。可指定属性值为“utf8”、“ascii”与“base64”。
当data参数值为一个Buffer对象时该属性值被忽略,使用默认编码格式utf8来执行文件的写入。
-
- callback:回调函数
flag的值有很多:
`w` 打开文件写入,默认值;
`w+`打开文件进行读写,如果不存在则创建文件;
`r+` 打开文件进行读写,如果不存在那么抛出异常;
`r`打开文件读取,读取时的默认值;
`a`打开要写入的文件,将流放在文件末尾。如果不存在则创建文件;
`a+`打开文件以进行读写,将流放在文件末尾。如果不存在则创建文件
追加内容到文件底部
fs.appendFileSync(filename,data,[options])
fs.appendFile(filename,data,[options],callback)
获取路径文件名
path.basename(path[, ext])
获取路径中的文件名+文件扩展名
如果设置第二个参数表示过滤“.扩展名”,只要文件名称
path.basename('/news/beijing/focus.html') => 'focus.html'
console.log(basename1);
path.basename('/news/beijing/focus.htmll', '.html'); => 'focus'
文件重命名
fs.renameSync(new_file_path, old_file_path)
fs.rename('sample.txt', 'sample_old.txt', function (err) {
if (err) throw err;
console.log('File Renamed.');
});