manlili blog

Node的文件系统

一般用js没办法对本地盘中文件进行读取或者其他操作,但是node.js有文件系统,可以很方便的读取文件内容。
测试例子github地址:https://github.com/manlili/node_learn里面lesson07

同步和异步读取文件

Node 导入文件系统模块(fs)语法如下所示:

1
var fs = require("fs")

创建readfile.js,内容是

1
2
3
4
5
6
7
8
9
10
var fs = require('fs');
fs.readFile('test.txt',function(err, data) {
if (err) {
return console.log(err);
}
console.log("异步读取的文件内容是:"+data.toString());
})
var data = fs.readFileSync('test.txt');
console.log("同步读取的文件内容是:"+data.toString());

进入js所在的文件夹内,打开gitBash输入:
图

打开文件

定义规则:

1
fs.open(path, flags[, mode], callback)

参数说明:
path - 文件的路径。
flags - 文件打开的行为。具体值详见下文。
mode - 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。
callback - 回调函数,带有两个参数如:callback(err, fd)。

关于flags 参数可以是以下值:
r:以读取模式打开文件。如果文件不存在抛出异常。
r+:以读写模式打开文件。如果文件不存在抛出异常。
rs:以同步的方式读取文件。
rs+:以同步的方式读取和写入文件。
w:以写入模式打开文件,如果文件不存在则创建。
wx:类似 ‘w’,但是如果文件路径存在,则文件写入失败。
w+:以读写模式打开文件,如果文件不存在则创建。
wx+:类似 ‘w+’, 但是如果文件路径存在,则文件读写失败。
a:以追加模式打开文件,如果文件不存在则创建。
ax:类似 ‘a’, 但是如果文件路径存在,则文件追加失败。
a+:以读取追加模式打开文件,如果文件不存在则创建。
ax+:类似 ‘a+’, 但是如果文件路径存在,则文件读取追加失败。

创建openfile.js,内容是

1
2
3
4
5
6
7
8
var fs = require('fs');
console.log("准备打开文件");
fs.open('test.txt','r+',function(err, data) {
if (err) {
return console.log(err);
}
console.log("文件打开成功");
})

进入js所在的文件夹内,打开gitBash输入:
图

获取文件信息

以下为通过异步模式获取文件信息的语法格式:

1
fs.stat(path, callback)

参数使用说明如下:
path - 文件路径。
callback - 回调函数,带有两个参数如:(err, stats), stats 是 fs.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。

创建statsfile.js,内容是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var fs = require("fs");
console.log("准备打开文件!");
fs.stat('test.txt', function (err, stats) {
if (err) {
return console.error(err);
}
console.log(stats);
console.log("读取文件信息成功!");
// 检测文件类型
console.log("是否为文件(isFile) ? " + stats.isFile());
console.log("是否为目录(isDirectory) ? " + stats.isDirectory());
});

进入js所在的文件夹内,打开gitBash输入:
图

写入文件

以下为异步模式下写入文件的语法格式:

1
fs.writeFile(filename, data[, options], callback)

参数使用说明如下:
path - 文件路径。
data - 要写入文件的数据,可以是 String(字符串) 或 Buffer(流) 对象。
options - 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 , flag 为 ‘w’
callback - 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。

创建writefile.js,内容是

1
2
3
4
5
6
7
8
9
var fs = require('fs');
fs.writeFile('lili.txt', '我是一只猪', function (err) {
if (err) {
return console.error(err);
}
})
fs.readFile('lili.txt',function(err, data) {
console.log("异步读取文件数据: " + data.toString());
})

进入js所在的文件夹内,打开gitBash输入:
图

当然还有很多关于文件的操作,详情请见文件系统手册http://www.runoob.com/nodejs/nodejs-fs.html

请我喝杯果汁吧!