nodejs 操作文件系統讀取寫入文件


我們通過fs這個模塊來對文件系統進行操作,對於文件系統操作一般都有同步、異步方法,兩者區別,同步等有返回結果時候,在繼續執行后面的代碼,異步是不等返回結果,直接執行后面的代碼,待有返回結果時候,通過回調函數來做出處理。一般同步方法函數名在異步方法名字后面加Sync,如異步讀取文件readFile,同步讀取文件為readFileSync,大多數情況用異步方法、但是讀取配置文件要用同步方法。

readFileSync(path,[options])

創aaa.js文件

readFile(path,[options],function(err,data){});
var fs= require("fs");
fs.readFile('./aa.txt',function(err,data){
    if(err){
        console.log("bad")
    }else{
        console.log("ok");
        console.log(data);
        console.log(data.toString());
        }
})

創建aa.txt文件

寫入你好


若我們異步讀取兩個文件,那么這兩個文件的結果誰先返回,我們是不知道的,這得看文件大小,所以我們要想有先后順序的讀取,那么得在回調函數中寫讀取第二個文件

var fs= require("fs");
fs.readFile('../file.txt',function(err,data){
    if(err){
        console.log("bad")
    }else{
        console.log("讀取第一個文件成功");
        console.log(data.toString());
        fs.readFile('../file2.txt','utf-8',function(err,data){
            if(err){
               console.log("讀取第二個文件失敗");
            }
            if(data){
                console.log("讀取第2個文件成功");
                console.log(data);
            }
        })
        }
})

  

options

flag:文件的操作情況,r表示這個文件只讀,w表示寫入文件,a追加文件(常用的三個)

encoding:讀取文件用的編碼,utf-8,base64,ascii我們不指定編碼,那么返回的data為一個buffer

var fs= require("fs");
fs.readFile('../file.txt',{flag:'r+',encoding:'utf-8'},function(err,data){
    if(err){
        console.log("bad")
    }else{
        console.log("讀取第一個文件成功");
        console.log(data);
        fs.readFile('../file2.txt','utf-8',function(err,data){
            if(err){
               console.log("讀取第二個文件失敗");
            }
            if(data){
                console.log("讀取第2個文件成功");
                console.log(data);
            }
        })
        }
})

writeFile(filename,data,[options],callback)

wrtieFileSync(filename,data,[options])

filename:要寫入的文件

data:寫入文件的數據可以是字符串,可以是buffer

options:flag:對寫入文件的操作默認為w,encoding:編碼,mode:權限

callback:回調函數

var fs = require("fs");
var data="aa";
fs.writeFile('./aa.txt',data,{flag:'w',encoding:'utf-8',mode:'0666'},function(err){
     if(err){
         console.log("文件寫入失敗")
     }else{
         console.log("文件寫入成功");
         console.log(data)

     }

}) 

var fs = require("fs");
var data="天下太平-追加";
fs.writeFile('./aa.txt',data,{flag:'a',encoding:'utf-8',mode:'0666'},function(err){
     if(err){
         console.log("文件寫入失敗")
     }else{
         console.log("文件追加成功");
         console.log(data)

     }

}) 

readFile 、writeFile 同時使用

讀取一張圖片,之后寫入到另一張圖片

var fs =require("fs");
fs.readFile('./1.png','base64',function(err,data){
    if(err){
        console.log("取圖片1失敗");
    }else{
        fs.writeFile('./2.png',data,'base64',function(err){
           console.log("圖片2寫入成功");
        })
    }
})

writeFile(filename,data,{flag:'a'},callback)與appendFile一致

var fs = require("fs");
var data="你好-追加appendFile";
fs.appendFile('./aa.txt',data,function(err){
     if(err){
         console.log("文件寫入失敗")
     }else{
         console.log("文件追加成功");

     }

}) 

從指定位置開始讀取文件

fs.open fs.read結合實現從指定位置讀取文件

fs.open(filename,options,[mode],callback)

callback(err,fd)

var fs =require("fs");
fs.open('./aa.txt','r','0666',function(err,fd){
    if(err){
       console.log("打開失敗");
    }else{
       console.log(fd);
    }
})

fs.read(fd,buffer,offset,length,pasition,callback)

fd:ope方發返回的文件描述符號

buffer:讀取的文件寫到那個緩存區中

offset:從緩存區中那個字節開始寫入

length:寫入多長的字節,

pasitong:文件指定位置處開始寫入緩存區

var fs =require("fs");
fs.open('./wfile.txt','r','0666',function(err,fd){
    if(err){
       console.log("打開失敗");
    }else{
       var buf=new Buffer(128);
       console.log(buf)
       fs.read(fd,buf,1,30,0,function(err,bytesRead,buf){
           if(err){
               console.log("指定位置讀取文件失敗");
           }else{
               console.log(bytesRead);
               console.log(buf);
           }
       })
    }
})

var bytesRead=readSync(fd,buffer,offset,length,position)

 

指定位置寫數據

fs.open()yu sf.write(fd,buffer,offset,length,position, callback)

var fs=require("fs");              

//這是追加   ‘w’ 是替換原來的文件內容  

fs.open('./wfile.txt','a','0666',function(err,fd){
    if(err){
       console.log("打開文件失敗");
    }else{
       var buffer=new Buffer("小鳥");
       console.log(buffer.length);
       fs.write(fd,buffer,0,buffer.length,0,function(err,written,buffer){
           if(err){
              console.log("指定位置寫入文件失敗");
           }else{
              console.log(written);
              console.log(buffer.toString());
           }
           
       })
     fs.fsync(fd);
       fs.close(fd);    
}
})

fs.fsync(fd)該方法吧緩存區的數據同步到文件中

fs.close(fd)關閉文件


免責聲明!

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



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