文件操作
文件操作可以使用nodejs的内置 fs
模块实现。
并且所有文件系统操作都具有同步和异步的形式。
读取文件
读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。
发现同步跟异步的方法名就是后面相差一个Sync。其他文件的同步异步操作亦如此。
const fs = require("fs");
// 第一个参数为文件路径,第二个参数为回调函数。
// error是读取出错的异常,如果没有出错,则error为undifine。
// data 为文件的数据。
fs.readFile("test", (error, data) => {
if (error) {
console.log(error);
} else {
console.log(`异步读取:${data.toString()}`);
}
});
// 同步读取,要try,catch下,捕获异常。
try {
const data = fs.readFileSync("test");
console.log(`同步读取:${data.toString()}`);
} catch (e) {
console.log(e);
}
/*
同步读取:hahaha
异步读取:hahaha
*/
以上可以看出,虽然异步读取代码写在前面,但是实际上,同步读取先进行,因为异步读取并没阻塞线程。
文件写入
异步模式下写入语法为:
fs.writeFile(file, data[, options], callback)
- file - 文件名或文件描述符。
- data - 要写入文件的数据,可以是 String(字符串) 或 Buffer(缓冲) 对象。
- options - 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 , flag 为 ‘w’
- callback - 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。
例如:
const fs = require('fs');
fs.writeFile("write-file","123456", error=>{
if (error){
console.log(error);
}else{
const data = fs.readFileSync('write-file');
console.log(data.toString());
}
});
/**
123456
*/
先写入文件,然后读取出来.
获取文件信息
异步获取文件信息语法:
fs.stat(path, callback)
例如:
const fs = require("fs");
fs.stat(`test`,(error,stats)=>{
if (error) {
console.log(error);
}else{
console.log(stats);
}
});
/*
Stats {
dev: 2066,
mode: 33204,
nlink: 1,
uid: 1000,
gid: 1000,
rdev: 0,
blksize: 4096,
ino: 13910026,
size: 6,
blocks: 8,
atimeMs: 1569741090778.4666,
mtimeMs: 1569741090466.4666,
ctimeMs: 1569741090466.4666,
birthtimeMs: 1569741090466.4666,
atime: 2019-09-29T07:11:30.778Z,
mtime: 2019-09-29T07:11:30.466Z,
ctime: 2019-09-29T07:11:30.466Z,
birthtime: 2019-09-29T07:11:30.466Z }
*/
stats类包含了文件的各种信息,还提供了有用的方法:如
const fs = require("fs");
fs.stat(`test`,(error,stats)=>{
if (error) {
console.log(error);
}else{
console.log(stats.isFile()); // true
console.log(stats.isDirectory()); // false
}
});
文件的删除
unlink:异步删除文件
const fs = require('fs');
fs.unlink('./test.txt',err=>{
if (err) {
console.log(err.message);
}else{
console.log(`删除成功!`);
}
});
// => 删除成功!
同步删除文件
使用同步的操作发生的异常会立即抛出,可以使用 try…catch
处理,也可以允许冒泡。
const fs = require('fs');
try {
fs.unlinkSync('/tmp/hello');
console.log('已成功删除 /tmp/hello');
} catch (err) {
// 处理错误
}
注意:使用异步的方法时无法保证顺序。 因此,对同一个文件的操作容易出错。
创建目录
语法:
fs.mkdir(path[,options],callback)
参数
参数使用说明如下:
- path - 文件路径。
- options 参数可以是:
- recursive - 是否以递归的方式创建目录,默认为 false。
- mode - 设置目录权限,默认为 0777。
- callback - 回调函数,没有参数。
例如:
const fs = require("fs");
fs.mkdir('dir',error=>{
if (error) {
console.log(error);
}else{
console.log(`创建目录成功!`);
}
});
如果目录存在则会出错,如果想要不管目录是否存在可以添加 recursive: true.
const fs = require("fs");
fs.mkdir('dir',{recursive: true},error=>{
if (error) {
console.log(error);
}else{
console.log(`创建目录成功!`);
}
});
读取目录
语法:
fs.readdir(path, callback)
参数
参数使用说明如下:
- path - 文件路径。
- callback - 回调函数,回调函数带有两个参数err, files,err 为错误信息,files 为 目录下的文件数组列表。
如,读取根目录(Linux系统):
const fs = require('fs');
fs.readdir('/',(error,files)=>{
if (error) {
console.log(error);
}else{
files.forEach(file=>{
console.log(file);
})
}
});
/*
bin
boot
cdrom
dev
etc
home
...
*/
删除目录
fs.rmdir(path, callback)
- path - 文件路径。
- callback - 回调函数,error参数.
const fs = require('fs');
fs.rmdir("dir",error=>{
if (error) {
console.log(error);
}
});
更多操作参考菜鸟教程.