Node.js 提供一組類似 UNIX(POSIX)標準的檔案操作API,
Node.js 檔案系統(fs 模塊)模塊中的方法均有異步和同步版本,例如讀取檔案內容的函式有異步的 fs.readFile() 和同步的 fs.readFileSync(),
異步的方法函式最后一個引數為回呼函式,回呼函式的第一個引數包含了錯誤資訊(error),
建議大家使用異步方法,比起同步,異步方法性能更高,速度更快,而且沒有阻塞,
創建 test.txt 檔案
這是在test.txt中的內容
創建 main.js 檔案
var fs=require("fs"); //異步 fs.readFile("test.txt",function(err,data){ if(err){ return console.error(err); } console.log("異步:"+data.toString()); }) //同步 var data=https://www.cnblogs.com/chenyingying0/p/fs.readFileSync("test.txt"); console.log("同步:"+data.toString());

異步模式下打開檔案
fs.open(path, flags[, mode], callback)
-
path - 檔案的路徑,
-
flags - 檔案打開的行為,具體值詳見下文,
-
mode - 設定檔案模式(權限),檔案創建默認權限為 0666(可讀,可寫),
-
callback - 回呼函式,帶有兩個引數如:callback(err, fd),

var fs=require("fs"); //異步 fs.open("test.txt","r+",function(err,data){ if(err){ return console.error(err); } console.log("檔案打開成功"); })

異步模式獲取檔案資訊的語法格式:
fs.stat(path, callback)
-
path - 檔案路徑,
-
callback - 回呼函式,帶有兩個引數如:(err, stats), stats 是 fs.Stats 物件,
var fs=require("fs"); //異步 fs.stat("test.txt","r+",function(err,stats){ if(err){ return console.error(err); } console.log(stats.isFile());//判斷是否是檔案 })


var fs=require("fs"); //異步 fs.stat("test.txt","r+",function(err,stats){ if(err){ return console.error(err); } console.log(stats.isFile());//判斷是否是檔案 console.log(stats.isDirectory());//判斷是否是目錄 })

var fs=require("fs"); //異步 fs.stat("test.txt",function(err,stats){ if(err){ return console.error(err); } console.log(stats); console.log(stats.isFile());//判斷是否是檔案 console.log(stats.isDirectory());//判斷是否是目錄 })

異步模式下寫入檔案的語法格式:
fs.writeFile(file, data[, options], callback)
writeFile 直接打開檔案默認是 w 模式,所以如果檔案存在,該方法寫入的內容會覆寫舊的檔案內容,
-
file - 檔案名或檔案描述符,
-
data - 要寫入檔案的資料,可以是 String(字串) 或 Buffer(緩沖) 物件,
-
options - 該引數是一個物件,包含 {encoding, mode, flag},默認編碼為 utf8, 模式為 0666 , flag 為 'w'
-
callback - 回呼函式,回呼函式只包含錯誤資訊引數(err),在寫入失敗時回傳,
var fs=require("fs"); //異步 fs.writeFile("test.txt","這是新寫入的哈",function(err){ if(err){ return console.error(err); } console.log("資料寫入成功"); fs.readFile("test.txt",function(err,data){ if(err){ return console.error(err); } console.log(data.toString()); console.log("資料讀取成功"); }) })

異步模式下讀取檔案的語法格式:
fs.read(fd, buffer, offset, length, position, callback)
-
fd - 通過 fs.open() 方法回傳的檔案描述符,
-
buffer - 資料寫入的緩沖區,
-
offset - 緩沖區寫入的寫入偏移量,
-
length - 要從檔案中讀取的位元組數,
-
position - 檔案讀取的起始位置,如果 position 的值為 null,則會從當前檔案指標的位置讀取,
-
callback - 回呼函式,有三個引數err, bytesRead, buffer,err 為錯誤資訊, bytesRead 表示讀取的位元組數,buffer 為緩沖區物件,
var fs=require("fs"); var buf=new Buffer.alloc(1024);//分配buffer //異步 fs.open("test.txt","r+",function(err,fd){ if(err){ return console.error(err); } console.log("檔案打開成功"); fs.read(fd,buf,0,buf.length,0,function(err,bytes){ if(err){ return console.error(err); } console.log(bytes+" 位元組被讀取"); //輸出讀取的位元組 if(bytes>0){ console.log(buf.slice(0,bytes).toString()); console.log("資料讀取成功"); } }) })

異步模式下關閉檔案的語法格式:
fs.close(fd, callback)
-
fd - 通過 fs.open() 方法回傳的檔案描述符,
-
callback - 回呼函式,沒有引數,
var fs=require("fs"); var buf=new Buffer.alloc(1024);//分配buffer //異步 fs.open("test.txt","r+",function(err,fd){ if(err){ return console.error(err); } console.log("檔案打開成功"); fs.read(fd,buf,0,buf.length,0,function(err,bytes){ if(err){ return console.error(err); } console.log(bytes+" 位元組被讀取"); //輸出讀取的位元組 if(bytes>0){ console.log(buf.slice(0,bytes).toString()); console.log("資料讀取成功"); } //關閉檔案 fs.close(fd,function(err){ if(err){ console.error(err); } console.log("檔案關閉成功"); }) }) })

異步模式下截取檔案的語法格式:
fs.ftruncate(fd, len, callback)
-
fd - 通過 fs.open() 方法回傳的檔案描述符,
-
len - 檔案內容截取的長度,
-
callback - 回呼函式,沒有引數,
var fs=require("fs"); var buf=new Buffer.alloc(1024);//分配buffer //異步 fs.open("test.txt","r+",function(err,fd){ if(err){ return console.error(err); } console.log("檔案打開成功"); //截取檔案 fs.ftruncate(fd,9,function(err){ if(err){ return console.error(err); } console.log("檔案截取成功"); fs.read(fd,buf,0,buf.length,0,function(err,bytes){ if(err){ return console.error(err); } console.log(bytes+" 位元組被讀取"); //輸出讀取的位元組 if(bytes>0){ console.log(buf.slice(0,bytes).toString()); console.log("資料讀取成功"); } //關閉檔案 fs.close(fd,function(err){ if(err){ console.error(err); } console.log("檔案關閉成功"); }) }) }) })

洗掉檔案的語法格式:
fs.unlink(path, callback)
-
path - 檔案路徑,
-
callback - 回呼函式,沒有引數,
var fs=require("fs"); var buf=new Buffer.alloc(1024);//分配buffer //洗掉檔案 fs.unlink("test.txt",function(err){ if(err){ console.error(err); } console.log("檔案洗掉成功"); })


創建目錄的語法格式:
fs.mkdir(path[, options], callback)
-
path - 檔案路徑,
-
options 引數可以是:
- recursive - 是否以遞回的方式創建目錄,默認為 false,
- mode - 設定目錄權限,默認為 0777,
-
callback - 回呼函式,沒有引數,
var fs=require("fs"); var buf=new Buffer.alloc(1024);//分配buffer //創建目錄 fs.mkdir("temp/test/",function(err){ if(err){ return console.error(err); } console.log("目錄創建成功"); })


這個案例中必須保證temp目錄是存在的
可以添加 recursive: true 引數,不管temp是否存在:
var fs=require("fs"); var buf=new Buffer.alloc(1024);//分配buffer //創建目錄 fs.mkdir("temp/test/",{recursive:true},(err)=>{ if(err){ throw err; } console.log("目錄創建成功"); })


讀取目錄的語法格式:
fs.readdir(path, callback)
var fs=require("fs"); var buf=new Buffer.alloc(1024);//分配buffer //讀取目錄 fs.readdir("temp/test/",function(err,files){ if(err){ throw err; } files.forEach(function(file){ console.log(file); }) })

洗掉目錄的語法格式:
fs.rmdir(path, callback)
var fs=require("fs"); var buf=new Buffer.alloc(1024);//分配buffer //洗掉目錄 fs.rmdir("temp/test/",function(err){ if(err){ throw err; } console.log("洗掉目錄成功"); })

這里報錯了,因為我要洗掉的目錄不是空目錄,得先保證目錄里沒有檔案才能洗掉目錄
以下再補充一些常用的操作方法,要看完整的請上官方檔案
fs.rename(oldPath, newPath, callback)
異步 rename().回呼函式沒有引數,但可能拋出例外,
fs.chmod(path, mode, callback)
異步 chmod().回呼函式沒有引數,但可能拋出例外,
fs.appendFile(filename, data[, options], callback)
異步追加檔案內容,
fs.watchFile(filename[, options], listener)
查看檔案的修改,
fs.unwatchFile(filename[, listener])
停止查看 filename 的修改,
fs.exists(path, callback)
檢測給定的路徑是否存在,
fs.access(path[, mode], callback)
測驗指定路徑用戶權限,
fs.createReadStream(path[, options])
回傳ReadStream 物件,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/143005.html
標籤:JavaScript
