07-文件读取和写入
6.3.3 文件读取和写入
使用之前先引入模块:
var fs = require('fs');
在整本书中关于文件系统的大多数示例都使用了非流式读写方法。通过这种非流式功能,我们可以用两种方式来读取或写入文件。
第一种读写方式是用简单的 fs.readFile()
或 fs.write()
方法(或者它们的同步方法)。这些函数会打开文件,然后进行读写,最后关闭文件。在下面的代码中,我们打开一个文件,删除原本的内容,写入新内容。写入完成后,打开文件进行读取,内容会被读取并打印到控制台。
var fs = require('fs');
fs.writeFile('./some.txt','Writing to a file',function(err) {
if (err) return console.error(err);
fs.readFile('./some.txt','utf-8', function(data,err) {
if (err) return console.error(err);
console.log(data);
});
});
由于输入和输出到文件是通过缓冲器完成的,默认情况下,我使用 utf-8
作为 fs.readFile()
函数的第二个参数来读取该文件。我也可以将缓冲器转换为字符串。
第二种读写方式是打开文件并分配一个文件描述符( fd
),然后使用文件描述符来读写文件。这种方法的优点在于,你可以控制文件的打开方式,以及打开后的操作。
在下面的代码中,我们创建了一个文件,然后进行写入和读取。 fs.open()
的第二个参数是一个标志位,表示可以对该文件执行的操作,在本例中是' a+
',这表示可以以追加内容的方式打开或读取文件,并且在文件不存在时创建它。第三个参数设置了文件权限(允许读写)。
"use strict";
var fs = require('fs');
fs.open('./new.txt','a+',0x666, function(err, fd) {
if (err) return console.error(err);
fs.write(fd, 'First line', 'utf-8', function(err,written, str) {
if (err) return console.error(err);
var buf = new Buffer(written);
fs.read(fd, buf, 0, written, 0, function (err, bytes, buffer) {
if (err) return console.error(err);
console.log(buf.toString('utf8'));
});
});
});
文件描述符会在回调中返回,然后与 fs.write()
函数一起使用。字符串会写入文件起始位置。不过要注意,根据Node文档,当文件在Linux中以追加(append)模式打开时,数据总是写入其末尾(位置指示符被忽略)。
fs.write()
的回调函数返回一个错误(如果有的话)、写入的字节数,以及写入的字符串。最后, fs.read()
会把写入的那行内容读入缓冲器,最后打印到控制台中。
当然,一般我们不会读取写入的那行,示例中是为了展示3个主要方法的使用,才用这种方式读写文件。除了操作文件之外,你也可以直接操作目录。