nodejs-3.操作文件和文件夹 -- fs模块

一.引入文件模块:

const fs = require('fs');

所有的文件系统操作都有异步和同步两种形式。

  • 异步形式的最后一个参数都是完成时回调函数。传给回调函数的参数取决于具体方法,但回调函数的第一个参数都会保留给异常。 如果操作成功完成,则第一个参数会是 null 或 undefined
  • 当使用同步操作时,任何异常都会被立即抛出,可以使用 try/catch 来处理异常,或让异常向上冒泡。
二.fs模块常用的一些 API:
1.文件操作

(1)读取文件readFile

let fs=require('fs');
//1.txt  => Helloween
fs.readFile('1.txt',function(err,data){
  if(err){
    console.log(err);
  }else{
    console.log(data);//<Buffer 48 65 6c 6c 6f 77 65 65 6e>
    console.log(data.toString());//Helloween
  }
});

注:buffer 内容是十六进制信息的 ASCII 码,可以先转换成十进制再对照ASCII表;当然,直接使用toString()转换即可。

(2)写入文件writeFile

fs.writeFile('2.txt', 'xxxxx', function(err){
   if(err){
     console.log(err);
     return;
   }
});

注:文件对象存在则直接把内容写入;文件对象不存在则会自动创建再写入;且写入的内容会直接覆盖原有内容。
(3)追加文件appendFile: 会把内容往文件内的最后内容位置添加进去。

fs.appendFile('2.txt','\r\nhello world',function(err){
  if(err){
     console.log(err);
     return;
   }
});

(4)删除文件unlink

fs.unlink('2.txt', function(err){
  if(err){
     console.log(err);
     return;
   }
});

2.文件夹操作

(1)创建文件夹 mkdir

fs.mkdir('./public', function(err){
  if(err){
     console.log(err);
     return;
   }
});

(2)删除文件夹 rmdir

fs.rmdir('./public', function(err){
  if(err){
     console.log(err);
     return;
   }
});

(3)读取文件夹 readdir

fs.readdir('../test', function(err, data){
  if(err){
    console.log(err);
  }else{
    console.log(data);//[ '1.txt', 'fs.js', 'project', 'server.js' ]
  }
});

3.检查文件或文件夹是否存在: fs.access() 、 fs.existsSync()

(1) fs.access(path[, mode], callback)

fs.access('./abc', fs.constants.F_OK, function(err){
 if(err){
   console.log(err);
   return;
 }
 console.log('存在')
});

(2) fs.existsSync(path) 同步,不使用回调。如果路径存在,则返回 true,否则返回 false。

var res = fs.existsSync('./abc');

console.log(res);//false

4. 获取文件或文件夹状态信息

(1)异步获取状态信息  fs.stat(path,callback):

回调有两个参数 (err, stats) 其中 stats 是一个 fs.Stats 对象,可以用来检查对象是文件stats.isFile()还是文件夹stats.isDirectory(),查看它的大小、创建时间、修改时间 ... ...

fs.stat('./1.txt', function(err, stats){
  //回调有两个参数 (err, stats) 其中 stats 是一个 fs.Stats 对象。
   console.log(stats.isDirectory());//false
   console.log(stats.isFile());//true
   //查看文件的其他信息
   console.log(stats);
  //  Stats {
  //   dev: 275776299,
  //   mode: 33206,
  //   nlink: 1,
  //   uid: 0,
  //   gid: 0,
  //   rdev: 0,
  //   blksize: undefined,
  //   ino: 8444249301415788,
  //   size: 9,
  //   blocks: undefined,
  //   atimeMs: 1526954051821.0154,
  //   mtimeMs: 1526954068932.9944,
  //   ctimeMs: 1526954068932.9944,
  //   birthtimeMs: 1526954051821.0154,
  //   atime: 2018-05-22T01:54:11.821Z,
  //   mtime: 2018-05-22T01:54:28.933Z,
  //   ctime: 2018-05-22T01:54:28.933Z,
  //   birthtime: 2018-05-22T01:54:11.821Z 
  // }
}); 

(2)同步方式检测状态信息: fs.statSync(path)

var stats = fs.statSync('1.txt');

console.log(stats.isDirectory());//false
console.log(stats.isFile());//true
console.log(stats);
// Stats {
//   dev: 275776299,
//   mode: 33206,
//   nlink: 1,
//   uid: 0,
//   gid: 0,
//   rdev: 0,
//   blksize: undefined,
//   ino: 8444249301415788,
//   size: 9,
//   blocks: undefined,
//   atimeMs: 1526954051821.0154,
//   mtimeMs: 1526954068932.9944,
//   ctimeMs: 1526954068932.9944,
//   birthtimeMs: 1526954051821.0154,
//   atime: 2018-05-22T01:54:11.821Z,
//   mtime: 2018-05-22T01:54:28.933Z,
//   ctime: 2018-05-22T01:54:28.933Z,
//   birthtime: 2018-05-22T01:54:11.821Z 
// }

5.复制文件: fs.copyFile(src, dest[, flags], callback)  新增于: v8.5.0,记得升级node

fs.copyFile('1.txt','2.txt', function(err){
  if(err){
     console.log(err);
     return;
   }
})

6.文件或文件夹重命名:fs.rename(oldPath, newPath, callback)

fs.rename('1.txt','1.txt-bak', function(err){
  if(err){
     console.log(err);
     return;
   }
})

  

猜你喜欢

转载自www.cnblogs.com/xzsz/p/9071673.html