Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API。 Node 导入文件系统模块(fs)语法如下所示:
var fs = require("fs");
该API的主要功能包括创建目录、读写文件、重命名、删除文件等。
(注)操作的文件路径可以是相对路径也可以是绝对路径,若为相对路径时,以入口文件index.js作为路径起始位置。
(注)API文档中若参数里带有[,option],均表示为可选参数,详细情况Node.js文档,这里就不标出来了。
fs.existsSync(path)
检测文件或文件夹是否存在,如果文件存在,则返回 true,否则返回 false。
console.log(fs.existsSync("api")); //true|false 检测文件夹api是否存在
console.log(fs.existsSync("fs.txt")); //true|false 检测文件fs.txt是否存在
异步创建文件夹
fs.mkdir("fsdir", function(err) {
if(err) {
console.log("文件夹已存在");
} else {
console.log("文件夹创建成功");
}
});
fs.mkdirSync(path[, mode])
同步创建文件夹
try {
fs.mkdirSync("fsdir");
console.log("文件夹创建成功");
} catch(e) {
console.log("文件夹已存在");
}
异步创建文本文件
fs.writeFile("fs.txt", "Hello World", function(err) {
if(err) {
console.log("文本创建失败");
} else {
console.log("文本创建成功");
}
});
fs.writeFileSync(file, data[, options])
同步创建文本文件
try {
fs.writeFileSync("fs.txt", "Sync Hello World");
console.log("文本创建成功");
} catch(e) {
console.log("文本创建失败");
}
fs.appendFile(file, data[, options], callback)
异步追加文本
fs.appendFile("fs.txt", "追加", function(err) {
if(err) {
console.log("文本追加失败");
} else {
console.log("文本追加成功");
}
});
同步追加文本
try {
fs.appendFileSync("fs.txt", "同步追加");
console.log("文本追加成功");
} catch(e) {
console.log("文本追加失败");
}
fs.readFile(path[, options], callback)
异步读取文本
fs.readFile("fs.txt", function(err, data) {
if(err) {
console.log("没有找到文件fs.txt");
} else {
console.log(data.toString());
}
});
fs.readFileSync(path[, options])
同步读取文本
var buf = fs.readFileSync("fs.txt");
console.log(buf.toString("utf-8"));
fs.readdir(path[, options], callback)
异步读取目录内容
fs.readdir("api", function(err, files) {
if(err) {
console.log("没有找到文件夹api");
} else {
for(var i = 0; i < files.length; i++) {
console.log(files[i]); // 文件名称
}
}
});
fs.readdirSync(path[, options])
同步读取目录内容
console.log(fs.readdirSync("api")); // [ 'API-Buffer.js', 'API-fs.js', 'API-path.js', 'API-url.js' ]
fs.rename(oldPath, newPath, callback)
异步重命名
fs.rename('fs.txt', 'newfs.txt', function(err) {
if(err) {
console.log('重命名失败');
} else {
console.log('重命名成功');
}
});
fs.renameSync(oldPath, newPath)
同步重命名
try {
fs.renameSync('fs.txt', 'newfs.txt');
console.log("重命名成功");
} catch(e) {
console.log("重命名失败");
}
fs.stat(path, callback)
获取文件状态,包括大小,创建时间等
fs.stat('fs.txt', function(err, stat) {
if(err) {
console.log("找不到文件fs.txt");
} else {
console.log(stat);
}
});
fs.unlink(path, callback)
异步删除文件
fs.unlink("fs.txt", function(err) {
if(err) {
console.log("删除失败");
} else {
console.log("删除成功");
}
});
fs.unlinkSync(path)
同步删除文件
try{
fs.unlinkSync("fs.txt");
console.log("删除成功");
}catch(e){
console.log("删除失败");
}
fs.access(path[, mode], callback)
检测对文件或文件夹是否有读写的权限
fs.access('api', fs.constants.R_OK | fs.constants.W_OK, function(err) {
console.log(err ? 'no access!' : 'can read/write'); // can read/write
});
fs.access('fs.txt', fs.constants.R_OK | fs.constants.W_OK, function(err) {
console.log(err ? 'no access!' : 'can read/write'); // can read/write
});
fs.watch(filename[, options][, listener])
监听文件是否发生改变,移除监听使用unwatchFile
fs.watch("fs.txt", function(eventType, filename) {
console.log(eventType); //change | rename
if(filename) {
console.log(filename + '发生了改变'); // fs.txt发生了改变
} else {
console.log(filename + '没有改变');
}
});