File System 文件系統模塊


  該模塊是核心模塊,使用需要用require導入後使用。
  在這篇文章中,我主要介紹一些File System的一些方法和使用。
  當然,在node官網中也有相對應的api文檔,更加詳細的可以查閱官網。
  api路徑爲:http://nodejs.cn/doc/node/fs.html


一:fs.open 和 fs.openSync

    1、fs.open(path, flags, [mode], callback);//異步打開一個文件

          對應參數:
                 path:要打開的文件路徑
                 flags:打開文件的方式,(讀/寫)
                 [mode]:設置文件的讀寫模式 讀/寫/執行 4/2/1(這個參數在windows系統下是沒有什麼區別的)
                 callback:回調
                                 err:文件打開失敗的錯誤保存在err中,如果成功err爲Null
                                 fd:被打開文件的標識
        在這裏,詳細介紹一下flags值的多種形式的意思:
                'r' -   以讀取模式打開文件,文件不存在時會拋出異常
                'r+' - 以讀寫模式打開文件,文件不存在時拋出異常
                'rs' - 使用同步模式打開並讀取文件。指示操作系統忽略本地文件系統緩存
               'rs+' - 以同步的方式打開,讀取 並 寫入文件
               注意:這不是讓fs.open變成同步模式的阻塞操作。如果想要同步模式請使用fs.openSync
                'w' - 以讀取模式打開文件,如果文件不存在則創建
                'wx' - 和 ' w ' 模式一樣,但是文件存在則返回失敗
                'w+' - 以讀寫模式打開文件,如果文件不存在則創建,文件存在時,原有文件會被全部清空,再進行寫入動                 作
                'wx+' - 和 ' w+ ' 模式一樣,但是文件存在則返回失敗

                'a' - 以追加模式打開文件,如果文件不存在則創建
                'ax' - 和 ' a ' 模式一樣,但是文件存在則返回失敗
                'a+' - 以讀取追加模式打開文件,如果文件不存在則創建
               'ax+' - 和 ' a+ ' 模式一樣,但是文件存在則返回失敗


var fs = require('fs');
fs.open('test.js','r',function(err,fd){


    if(err){
        console.log("文件打開失敗");
    }else{
        console.log("文件打開成功");
        console.log(fd);
    }
});


     2、fs.openSync(path, flags ,[mode]) ; //同步打開一個文件 返回值爲fd

var fs = require('fs');
var fd = fs.openSync('test.js','r');
console.log("同步方式:"+fd);


二:fs.readFile 和 fs.readFileSync

    1、fs.readFile(file[, options], callback); //異步讀取一個文件

    2、fs.readFileSync(file[, options])同步讀取一個文件

         這兩個方法我就不在這裏詳細講解了,在我另一篇文章中有重點介紹着兩個方法的使用和區別。
         node中的文件讀取---fs和path


三:fs.write 和 fs.writeSync

    1、fs.write(fd, buffer, offset, length, [position], callback); //異步通過文件的標識fd,向制定的文件中寫入               buffer

          fs.write方法中各個參數的意思:
               fd
               buffer:要寫入的數據
               offset:偏移量(buffer對象中要寫入數據的偏移起始位置)
               length:寫入buffer數據的長度
               position :fd的起始位置
               callback:回調

var fs = require('fs');
fs.open('3.txt','w+',function(err,fd){


    if(err){
        console.log("文件打開失敗");
    }else{
        console.log("文件打開成功");
        console.log(fd);
        var buffer = new Buffer('abc');
        fs.write(fd,buffer,0,3,10,function(){
        });
        fs.close(fd,function(){

        });
    }
});


   2、fs.write(fd, data, [position], [encoding], callback); //以字符串形式寫文件

          把data通過指定fd寫入到文檔中,如果對象不是buffer對象的實例,則會把值強制轉換爲一個字符串。

var fs = require('fs');
fs.write(fd,'1234',5,'utf-8',function(){});

   3、fs.writeSync(fd, buffer, offset, length, [position]); // 同步寫入文件

          注意:同步類型的函數都是沒有回調函數的。
   

   三、fs.close 和 fs.closeSync 

       1、fs.close(fd, callback) ; //異步關閉一個文件

            關閉一個打開的文件(打開一個文件,操作完成之後完成之後最好及時的關掉該文件)。

       2、fs.closeSync(fd);  //同步關閉一個文件

  四:fs.writeFile 和fs.writeFileSync

       1、fs.writeFile(file, data, [options], callback); //異步的將數據寫入一個文件

            如果文件不存在則創建,如果文件原先存在,原先的內容則會被替換。data是一個String,也可以是一個原生               buffer。存入的數據會覆蓋原來文件的內容。但是在使用fs.writeFile這個方法,在沒有等到回調又再次使用這               個 方法的情況,是不安全的。
var fs = require('fs');
var fileName = "1.txt";
fs.writeFile(fileName,"hello",function(err){
	     if(err){
               console.log('出錯了');
	     }else{
	       console.log('創建成功');
	     }
	  });


       2、fs.writeFileSync(file, data, [options]); // 同步的將數據寫入一個文件

                     
var fs = require('fs');
var fileName = "1.txt";
fs.writeFile(fileName,"hello");


 五:fs.appendFile 和 fs.appendFileSync

     1、fs.appendFile(file, data, [options], callback); //異步的將數據添加到文件的尾部

                 如果文件不存在則創建,如果文件原先存在,則會被替換。data是一個String,也可以是一個原生buffer。
          

var fs = require('fs');
var fileName = "1.txt";
fs.appendFile(fileName,'-eee',function(err){
	     if(err){
                console.log('出錯了');
	     }elsr{
	        console.log('添加成功');
	     }
	 });

     2、fs.appendFileSync(file, data, [options]); //同步的將數據添加到文件的尾部

var fs = require('fs');
var fileName = "1.txt";
fs.appendFile(fileName,'-eee');


  六:fs.exists 和 fs.existsSync

      1、fs.exists(path, callback);  //異步的判斷文件是否存在

          該方法檢查指定路徑的文件或者目錄是否存在。

          其實最好的辦法就是fs.open的方法,根據回調函數返回來的值來判斷文件是否存在。
          

var fs = require('fs');
var fileName = "1.txt";
if(fs.existsSync(fileName)){
	if(fs.writeFileSync(fileName,"hello")){
       console.log('出錯了');
	}else{
       console.log('創建成功');
	}
}else{
	if(fs.appendFile(fileName,'-eee'){
		if(err){
			console.log('出錯了');
		}else{
			console.log('添加成功');
		}
	}
}




          其實上面這部分代碼可以用fs.appendFile這個方法就可以實現這個功能了。

      2、fs.existsSync(path);  //同步的判斷文件是否存在

  七:fs.link 和 fs.linkSync

      1、fs.link(srcpath, dstpath, callback); //異步方式刪除一個文檔
     2、fs.linkSync(srcpath, dstpath); /同步方式刪除一個文檔

var fs = require('fs');
var fileName = "1.txt";
fs.unlink(fileName,function(err){
	if(err){
		console.log('刪除失敗');
	}else{
		console.log('刪除成功');
	}
});


  八:fs.rename 和 fs.renameSync

      1、fs.rename(oldPath, newPath, callback); //異步方式對文件進行重命名

var fs = require('fs');
var fileName = "1.txt";
fs.rename(fileName,'2-new.txt',function(){
	console.log(arguments);
});


      2、fs.renameSync(oldPath, newPath); //同步方式對文件進行重命名

  九:fs.stat 和 fs.statSync

      1、fs.stat(path, callback) ;   // 異步方式讀取文件狀態信息

var fs = require('fs');
var fileName = "1.txt";
fs.stat(fileName,function(){
	console.log(arguments);
});


      2、fs.statSync(path); //同步方式讀取文件狀態信息

  
十:fs.watch  

     1、 fs.watch(filename [,options], [listener]); // 觀察路徑的變化,可以是文檔或者目錄

               這個方法不穩定,不同的版本會有調整。
               該功能依賴於操作系統底層提供的方法來監視文件系統的變化。
fs.watch(fileName,function(ev,fn){
	//ev:當前事件
	//fn:當前監聽的文件
	console.log(ev);
	if(fn){
		console.log(fn:"發生了變化");
	}else{
		console.log("...");
	}

});


 十一:fs.mkdir 和 fs.mkdirSync

        1、fs.mkdir(path, [mode], callback); // 異步創建文件夾


在當前目錄下創建一個名爲‘1’的文件夾

var fs = require('fs');

fs.mkdir('./1',function(){
    console.log(arguments);
});


        2、fs.mkdirSync(path, [mode]); //同步創建文件夾

十二:fs.readdir 和 fs.readdirSync

       1、fs.readdir(path, callback);  //異步讀取文件夾


var fs = require('fs');
fs.readdir('../node',function(err,fileList){
    console.log(fileList);
});
以下代碼來讀取上層node目錄下的全部文件(包括文件夾),執行結果如下 


    現在我們來完善一下代碼,來明確出哪些是文件夾,哪些是文件。

var fs = require('fs');
fs.readdir('../node',function(err,fileList){
    //console.log(fileList);
    fileList.forEach(function(f){
        fs.stat(f,function(e,info){
            switch (info.mode){
                case 16822:
                    console.log('[文件夾] '+ f);
                    break;
                case 33206:
                    console.log('[文件] '+ f);
                    break;
            }
        });
    });
});
 

   執行結果爲:

   


       2、fs.readdirSync(path);  //同步讀取文件夾

十三:

       1、fs.rmdir(path, callback); // 異步刪除文件夾

var fs = require('fs');
fs.rmdir('./1',function(){
    console.log(arguments);
});


       2、fs.rmdirSync(path);  //同步刪除文件夾


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章