文件系统是任何一种语言都最常用的,之前一直都没搞懂python的读写模式,看到node文件系统有点明白了
引用
var fs = require("fs")
异步同步
node几乎所有的API都同时支持异步和同步,就这一点几乎算是前端的革命性框架了。
// 异步读取
fs.readFile('input.txt', function (err, data) {
if (err) {
return console.error(err);
}
console.log("异步读取: " + data.toString());
});
// 同步读取
var data = fs.readFileSync('input.txt');
console.log("同步读取: " + data.toString());
文件读写及读写模式
fs.open(path, flags[, mode], callback)
- path 文件的路径。
- flags 文件打开的行为
- mode 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。
- callback 回调函数,带有两个参数如:callback(err, fd)。
- openSync 不需要callback参数
// 异步打开
fs.open(path, flags[mode], callback)
// 同步打开
fs.openSync(path, flags[mode])
// 写文件
fs.writeFile(file, data[options], callback)
// 读文件
fs.read(fd, buffer, offset, length, position, callback)
读写模式
Flag | 描述 |
---|---|
r | 以读取模式打开文件。如果文件不存在抛出异常。 |
r+ | 以读写模式打开文件。如果文件不存在抛出异常。 |
rs | 以同步的方式读取文件。 |
rs+ | 以同步的方式读取和写入文件。 |
w | 以写入模式打开文件,如果文件不存在则创建。 |
wx | 类似 'w',但是如果文件路径存在,则文件写入失败。 |
w+ | 以读写模式打开文件,如果文件不存在则创建。 |
wx+ | 类似 'w+', 但是如果文件路径存在,则文件读写失败。 |
a | 以追加模式打开文件,如果文件不存在则创建。 |
ax | 类似 'a', 但是如果文件路径存在,则文件追加失败。 |
a+ | 以读取追加模式打开文件,如果文件不存在则创建。 |
ax+ | 类似 'a+', 但是如果文件路径存在,则文件读取追加失败。 |
写文件
fs.writeFile(file, data[, options], callback)
写文件默认w模式,也就是覆写模式
options:该参数是一个对象,包含 {encoding, mode, flag}。
默认编码为 utf8, 模式为 0666 , flag 为 'w'
console.log("准备写入文件:");
fs.writeFile("123.txt", "Hello World被写入!", function(err){
if (err) {
return console.log(err);
}
console.log("写入完成!");
fs.readFile("123.txt", function(err, data){
if (err) {
return console.error(err);
}
console.log("异步读取文件数据: " + data.toString());
});
});
读文件
fs.read(fd, buffer, offset, length, position, callback)
- fd - 通过 fs.open() 方法返回的文件描述符。
- buffer - 数据写入的缓冲区。
- offset - 缓冲区写入的写入偏移量。
- length - 要从文件中读取的字节数。
- position - 文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取。
- callback - 回调函数,有三个参数
- err 为错误信息
- bytesRead 表示读取的字节数
- buffer 为缓冲区对象。
fs.open('123.txt', 'r', function(err, data) {
if (err) {
return console.error(err);
}
console.log("文件打开成功!");
console.log("准备读取文件:");
fs.read(data, buf, 0, buf.length, 0, function(err, bytes){
if (err){
return console.log(err);
}
if(bytes > 0){
console.log("内容为:", buf.slice(0, bytes).toString());
}else{
console.log("读取字节异常:", bytes);
}
});
});
获取文件信息
fs.statSync(path[, options]) // 同步
fs.stat(path[, options], callback) // 异步
- path 文件路径。
- callback 回调函数,带有两个参数如:(err, stats), stats 是 fs.Stats 对象。
fs.stat(path)执行后,会将stats类的实例返回给其回调函数。可以通过stats类中的提供方法判断文件的相关属性。
方法 | 描述 |
---|---|
stats.isFile() | 如果是文件返回 true,否则返回 false。 |
stats.isDirectory() | 如果是目录返回 true,否则返回 false。 |
stats.isBlockDevice() | 如果是块设备返回 true,否则返回 false。 |
stats.isCharacterDevice() | 如果是字符设备返回 true,否则返回 false。 |
stats.isSymbolicLink() | 如果是软链接返回 true,否则返回 false。 |
stats.isFIFO() | 如果是FIFO,返回true,否则返回 false。FIFO是UNIX中的一种特殊类型的命令管道。 |
stats.isSocket() | 如果是 Socket 返回 true,否则返回 false。 |
fs.stat("123.txt", function(err, stat){
console.log("文件信息:", stat)
});
其他文件操作
- 关闭文件
fs.close(fd, callback)
- 截取文件
fs.ftruncate(fd, len, callback)
- 删除文件
fs.unlink(path, callback)
- 创建目录
fs.mkdir(path[mode], callback)
- 查看目录
fs.readdir(path, callback)
- 删除目录
fs.rmdir(path, callback)
注:
- 查看目录:查看该目录下的文件列
- 删除目录:该目录为空方可删除
- 删除非空目录可参考第三方框架,如
rimraf
等