当前位置:嗨网首页>书籍在线阅读

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个主要方法的使用,才用这种方式读写文件。除了操作文件之外,你也可以直接操作目录。