您的位置:首页 > Web前端 > Node.js

nodeJS - 5 - fs文件系统

2017-11-23 15:42 555 查看

fs 文件系统

说明

fs
filesystem
的缩写,此模块提供本地文件的读写能力,几乎对所有模块都提供异步和同步两种操作方式,异步方法的最后一个参数都是一个回调函数,传递给回调函数的参数取决于具体方法,但回调函数的第一个参数都会保留给异常;当使用同步方法时,任何异常都会被立即抛出

参考

Node.js 文档

JavaScript 标准参考教程 Node.js

1. 可访问性检查 access() accessSync()

旧版使用
exists()
判断给定路径是否存在 最新版已废弃,一共三个参数:

1)path: 指定文件或者目录

2)mode: 可选参数,指定要执行的可访问性检查,默认查询文件是否存在

3)callback: 回调函数,参数 err

不建议在调用 fs.open() 、 fs.readFile() 或 fs.writeFile() 之前使用 fs.access() 检查一个文件的可访问性。 如此处理会造成紊乱情况,因为其他进程可能在两个调用之间改变该文件的状态。 作为替代,用户代码应该直接打开/读取/写入文件,当文件无法访问时再处理错误。

const fs = require('fs');

fs.access('./test.js', function (err) {
console.log(err ? '不可访问' : '可访问');
})

fs.accessSync('./text.js'); // 直接报错


2. 打开文件 open() openSync()

参数:

1)path: 要打开的文件

2)flags: 以什么模式打开文件 r 读取模式 r+ 读写模式…

3)mode: 可选,文件模式

4)callback: 回调函数,参数 err fd

const fs = require('fs');

fs.open('./router.js', 'a+', function (err, fd) {
if (!err) {
console.log(fd);
} else {
console.log(err);
}
})

fs.openSync('./router.js', 'a+');


3. 读取文件 readFile(),readFileSync()

三个参数,

1)文件路径,可以是绝对路径,也可以是相对路径(相对于当前进程的路径);

2)可以省略的参数,可以设置文件编码;

3)回调函数,提供两个参数 err 错误信息和 data 读取的数据

fs.readFile('./output.txt', 'utf-8', function (err, data) {
console.log('err', err);
console.log('data', data);
})

const fileData = fs.readFileSync('./output.txt', 'utf-8');


4. 写入文件 writeFile(),writeFileSync()

写入数据到文件,如果文件已经存在则替代文件,可以有四个参数:

1)file: 文件名或者文件描述符;

2)要写入的数据;

3)可选参数,一些配置信息;

4)回调函数,参数 err 错误信息

const fs = require('fs');

fs.writeFile('./op.js', 'const a = "a";', 'utf-8', function (err) {
console.log(err); // null
})

fs.writeFileSync('./op.js', 'const b = "a";', 'utf-8');


5. 追加数据到文件 appendFile() appendFileSync()

追加数据到文件,如果文件不存在则创建文件

1)file: 文件名或者文件描述符

2)data: 要写入的数据

3)options: 配置

4)callback: 回调,参数 err

const fs = require('fs');

fs.appendFile('./test.txt', 'this is append', function (err) {
console.log(err ? '失败' : '成功');
})

fs.appendFileSync('./test.txt', 'this is appendSync');


6. 删除文件 unlink() unlinkSync()

1) 要删除的文件路径

2)callback: 回调,参数 err

const fs = require('fs');

fs.unlink('./output/output.txt', function (err) {
console.log(err);
})

fs.unlinkSync('./output/output.txt');


7. 创建目录 mkdir() mkdirSync()

三个参数

1)path: 要创建的目录名

2)选填,权限值

3)callback: 回调函数,参数 err

const fs = require('fs');

fs.mkdir('./output', function (err) {
console.log(err);
})

fs.mkdirSync('./output'); // 直接报错,重复创建相同目录


8. 读取目录 readdir() readdirSync()

三个参数

1)path 目录路径

2)options 配置项,可配置编码

3)callback 回调,参数: err 错误信息;files:目录下文件名数组

const fs = require('fs');

fs.readdir('./', function (err, files) {
console.log(err || files);
})

console.log(fs.readdirSync('./'));


9. 查询文件目录具体信息 stat() statSync()

stat方法的参数是一个文件或目录,它产生一个对象,该对象包含了该文件或目录的具体信息。我们往往通过该方法,判断正在处理的到底是一个文件,还是一个目录。

1)path: 目录路径

2)callback: 回调,参数:err 错误信息;stats 目录具体信息对象

stats 对象的属性

stats.isFile()
是否是文件

stats.isDirectory()
是否是目录

atime、atimeMs
访问时间

mtime、mtimeMs
修改时间

ctime、ctimeMs
变化时间

birthtime、birthtimeMs
创建时间

fs.readdir('./', function (err, files) {
if (!err) {
files.forEach((file) => {
fs.stat('./' + file, function (error, stats) {
if (!error) {
console.log(file, 'is FILE', stats.isFile());
console.log(file, 'is DIR', stats.isDirectory());
}
})
})
}
})

const stats = fs.statSync('./');


10. 移除文件夹 rmdir() rmdirSync()

1)path: 文件夹路径, 注意删除时,文件夹内不能有文件

2)callback: 回调,参数 err

const fs = require('fs');

fs.rmdir('./output', function (err) {
console.log(err || '成功');
})

fs.rmdirSync('./output');


11. 监视文件变化 watchFile() unwatchfile() watch()

watchFile
监听一个文件,如果该文件发生变化,就会自动触发回调函数;
unwatchfile
停止监视文件变化

watchFile()


1)filename: 文件名

2)options:可选配置:persistent 表示进程是否继续;interval 轮询时间间隔

3)listener: 监听函数,参数:current 当前文件状态; prev 之前的文件状态

unwatchfile()


1)filename: 文件名,停止监听此文件的变化

2)listener:可选,表示移除特定的监听器,否则移除所有的监听器

watch()
watchFile
unwatchfile
更高效的监听方法

1)filename: 文件或者目录

2)options: 可选配置项,persistent 表示进程是否继续;recursive 是否递归子目录,监视全部子目录,默认 false;encoding 文件编码

3)listener:监听函数, 参数 eventType:
rename
或者
change
; filename: 触发事件的文件名

fs.watch API 不是 100% 跨平台一致的,且在某些情况下不可用。递归选项只支持 macOS 和 Windows。

const fs = require('fs');

fs.watchFile('./test.txt', function (curr, prev) {
console.log(curr);
console.log('+++++++++ ========= ==+++++++++++');
console.log(prev);
fs.unwatchFile('./test.txt'); // 一次修改就停止监听
})

// ================================================ //
const fs = require('fs');

const a = fs.watch('./test.txt', function (eventType, fileName) {
console.log(eventType);
console.log('====== =++++++++ == ========');
console.log(fileName);
this.close(); // close 方法停止监视
})


12. 创建可读流和可写流 createReadStream() createWriteStream()

createReadStream
用于返回一个新建的
ReadStream
对象,参数如下:

1)path: 文件名

2)options:配置

createWriteStream
用于返回一个新建的
WriteStream
对象,参数如下:

1)path:目标文件路径

2)options:配置

fs.createReadStream('text.txt');

fs.createWriteStream('text.txt');
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: