node模块之fs

fs模块是文件操作的封装,它提供了文件的读取,写入,更名,删除,遍历目录,链接等文件系统操作

与其他模块不同的是,fs模块中所有的操作都提供了异步的和同步的两个版本,

例如读取文件内容的函数有①异步的fs.readFile()和②同步的fs.readFileSync()

具体详解:

①异步fs.readFile(filename,[encoding],[callback(err,data)])-----读取文件的函数

必选参数 filename,表示要读取的文件名

encoding可选参数,表示文件的字符编码

callback 是回调函数,用于接收文件的内容

回调函数提供两个参数err和data,err表示有没有错误发生,data是文件内容。

如果指定了encoding,data是一个解析后的字符串,否则data将会是以Buffer形式表示的二进制数据

也就是说,不指定编码方式就默认使用二进制的方式进行读取数据

 

②同步fs.readFileSync(filename, [encoding])-----读取文件的函数

参数和fs.readFile相同,而读取到的文件内容会以函数返回值的形式返回

如果有错误发生,fs将会抛出异常,需要使用try和catch捕捉并处理异常

 

读取目录:异步fs.readdir(path,[callback(err,files)])

         同步fs.readdirSync(path)

创建目录:异步fs.mkdir(path,[mode],[callback(err)])

         同步fs.mkdirSync(path,[mode])

删除目录:异步fs.rmdir(path,[callback(err)])

         同步fs.rmdirSync(path)

删除文件:异步fs.unlink(path,[callback(err)])

          同步fs.unlinkSync(path)

修改文件时间戳:异步fs.utimes(path,atime,mtime,[callback(err)])

          同步fs.utimesSync(path,atime,mtime)

获取文件信息:异步fs.stat(path,[callback(err,stats)])

          同步fs.statSync(path)

写入文件内容:异步fs.writeFile(filename,[encoding],[callback(err,data)])

          同步fs.writeFile(filename,[encoding])

读取文件内容:异步fs.readFile(filename,[encoding],[callback(err,data)])

          同步fs.readFileSync(filename,[encoding],[callback(err,data)]

 

详解:①readFile(),readFileSync()读取文件

readFile方法用于异步读取数据,readFile方法的第一个参数是文件的路径.第二个参数是读取完成后的回调函数,该函数的第一个参数是发生错误时的错误对象,第二个参数是代表文件内容的Buffer实例

例子:

fs.readFile('./image.png', function (err, buffer) {
        if (err) throw err;    //发生错误时的错误对象
        process(buffer);       //文件内容的Buffer实例
      });

 readFileSync方法用于同步读取文件,返回一个字符串.第一个参数是文件路径,第二个参数可以是一个表示配置的对象,也可以是一个表示文本文件编码的字符串

 

②writeFile(),writeFileSync()写入文件

writeFile方法异步写入文件,第一个参数是写入的文件名,第二个参数是写入的字符串,第三个参数是回调函数.回调函数前面,还可以再加一个参数,表示写入字符串的编码(默认是utf8)

writeFileSync方法用于同步写入文件,第一个参数是文件路径,第二个参数是写入文件的字符串,第三个参数是文件编码,默认为utf8

 

③exists(path, callback)判断文件存在与否

exists方法用来判断给定路径是否存在,然后不管结果如何,都会调用回调函数

下面的例子是如果给定目录存在,就删除它

if (fs.existsSync(outputFolder)) {
  console.log('Removing ' + outputFolder);
  fs.rmdirSync(outputFolder);
}

 

④mkdir(),writeFile(),readFile()

mkdir方法用于新建目录,接受三个参数,第一个是目录名,第二个是权限值,第三个是回调函数

var fs = require('fs');
fs.mkdir('./helloDir',0777, function (err) {
  if (err) throw err;
});

 

writeFile方法用于写入文件

readFile方法用于读取文件内容(注释:第一个参数是文件名,第二个参数是文件编码,第三个参数是回调函数。可用的文件编码包括“ascii”、“utf8”和“base64”。如果没有指定文件编码,返回的是原始的缓存二进制数据,这时需要调用buffer对象的toString方法,将其转为字符串)

 

⑤mkdirSync(),writeFileSync(),readFileSync()

同步建立目录、写入文件、读取文件

对于流量较大的服务器,最好还是采用异步操作,因为同步操作时,只有前一个操作结束,才会开始后一个操作,如果某个操作特别耗时(常常发生在读写数据时),会导致整个程序停顿

 

⑥readdir(),readdirSync()读取目录

读取目录,返回一个所包含的文件和子目录的数组

 

⑦stat方法:判断文件类型目录/文件

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

var fs = require('fs');
fs.readdir('/etc/', function (err, files) {
  if (err) throw err;
  files.forEach( function (file) {
    fs.stat('/etc/' + file, function (err, stats) {
      if (err) throw err;

      if (stats.isFile()) {
        console.log("%s is file", file);
      }
      else if (stats.isDirectory ()) {
      console.log("%s is a directory", file);
      }
    console.log('stats:  %s',JSON.stringify(stats));
    });
  });
});

 

⑧watchfile方法监听一个文件,如果该文件发生变化,就会自动触发回调函数

unwatchfile方法用于解除对文件的监听

 

⑨createReadStream方法往往用于打开大型的文本文件,创建一个读取操作的数据流。所谓大型文本文件,指的是文本文件的体积很大,读取操作的缓存装不下,只能分成几次发送,每次发送会触发一个data事件,发送结束会触发end事件

 

⑩createWriteStream方法创建一个写入数据流对象,该对象的write方法用于写入数据,end方法用于结束写入操作

createWriteStream方法创建一个写入数据流对象,该对象的write方法用于写入数据,end方法用于结束写入操作

猜你喜欢

转载自570109268.iteye.com/blog/2372890