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;
   }
});

(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; } })

 

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.rename(oldPath, newPath, callback)

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

 

6.fs操作實例

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM