三、fs文件操作模塊
阿新 • • 發佈:2017-12-05
object back 覆蓋 test ole fs模塊 異常 數據傳遞 string
fs模塊用於文件的讀寫等操作。
該模塊有如下這些方法:
1、fs.stat() : 檢測是文件還是目錄
const fs = require(‘fs‘);
fs.stat(‘test.html‘,function(err,stats){
if(err){
console.log(err);
}else{
console.log(‘文件:‘ + stats.isFile()); //true
console.log(‘目錄:‘ + stats.isDirectory()); //false
}
});
2、fs.mkdir():創建目錄
接受如下幾個參數:
- path :將創建的目錄路徑
- mode :目錄權限(讀寫權限),默認0777
callback :回調,傳遞異常參數err
fs.mkdir(‘css‘,function(err){ if(err){ console.log(err); }else{ console.log("創建成功"); } });
3、fs.writeFile():寫入文件
- filename (String) 文件名稱
- data (String | Buffer) 將要寫入的內容,可以使字符串 或 buffer數據。
- options (Object) option數組對象,包含 :
- · encoding (string) 可選值,默認 ‘utf8′,當data使buffer時,該值應該為 ignored。
- · mode (Number) 文件讀寫權限,默認值 438
- · flag (String) 默認值 ‘w‘
callback {Function} 回調,傳遞一個異常參數err。
var str = "Hello Node.js"; fs.writeFile(‘write.txt‘, str, ‘utf8‘, function (err) { if (err) { console.log(err); }else{ console.log("創建成功"); } });
如果該文件不存在則創建該名稱文件並寫入數據。如果多次寫入的話,那麽後面寫入的內容會覆蓋前面寫入的內容。
4、fs.appendFile():追加文件
用法與writeFile
相同,只是對此寫入的話不會覆蓋之前的數據,而是在其後追加數據。
5、fs.readFile() :讀取文件
回調函數中的data
即包含了讀取的數據。
fs.readFile(‘write.txt‘,function(err,data){
if(err){
console.log(err);
}else{
console.log(data.toString());
}
});
6、fs.readdir():讀取目錄,獲取目錄下面的文件和文件夾。
fs.readdir(‘css‘,function(err,data){
if (err){
console.log(err);
}else{
console.log(data);
}
});
不過這樣只能獲取第一級目錄
7、fs.rename():重命名文件
fs.rename(‘html/index.html‘,‘html/news.html‘,function(err){
if (err) {
console.log(err);
} else {
console.log(‘修改名字成功‘);
}
})
這樣就可以把index.html
文件名修改為news.html
。
這個方法還可以實現文件剪切功能:
fs.rename(‘html/css/basic.css‘,‘html/style.css‘,function(err){
if(err){
console.log(err);
return false;
}
console.log(‘剪切成功‘);
})
這樣就可以把html/css/basic.css
剪切到html/style.css
。
8、fs.redir():刪除目錄
fs.rmdir(‘text‘,function(err){
if(err){
console.log(err);
return false;
}
console.log(‘刪除目錄成功‘);
})
這裏的刪除只能刪除空目錄。
9、fs.unlink():刪除文件
fs.unlink(‘index.txt‘,function(err){
if(err){
console.log(err);
return false;
}
console.log(‘刪除文件成功‘);
})
10、fs.createReadStream():以流的方式讀取數據
這種方式讀取文件是分塊讀取的
// 創建一個可以讀取的流,讀取文件 input.txt 中
var readStream=fs.createReadStream(‘input.txt‘);
var str=‘‘;/*保存數據*/
var count=0; /*次數*/
//觸發data事件,開始取讀數據
readStream.on(‘data‘,function(chunk){
str+=chunk;
count++;
})
//觸發end事件,讀取完成
readStream.on(‘end‘,function(chunk){
console.log(count);
console.log(str);
})
//讀取失敗
readStream.on(‘error‘,function(err){
console.log(err);
})
這種讀取方式很高效,適合取讀大批量數據。如果所讀數據量不是很大的話使用上面的readFile
方法即可。
11、fs.createWriteStream():以流的方式寫入文件
var data = ‘我是從數據庫獲取的數據,我要保存到文件中去\n‘;
// 創建一個可以寫入的流,寫入到文件 output.txt 中
var writerStream = fs.createWriteStream(‘output.txt‘);
//開始寫入數據
writerStream.write(data,‘utf8‘);
//標記寫入完成
writerStream.end();
//觸發finish事件,完成寫入
writerStream.on(‘finish‘,function(){
console.log(‘寫入完成‘);
})
//失敗
writerStream.on(‘error‘,function(){
console.log(‘寫入失敗‘);
})
同樣,如果要寫入的文件不存在就創建該文件再寫入。
12、管道流讀取
管道提供了一個輸出流到輸入流的機制。通常我們用於從一個流中獲取數據並將數據傳遞到另外的一個流中。
// 創建一個可讀流,這是管道的輸出端
var readerStream = fs.createReadStream(‘input.txt‘);
// 創建一個可寫流,這是管道的輸入端
var writerStream = fs.createWriteStream(‘output.txt‘);
// 管道讀寫操作
// 讀取 input.txt 文件內容,並將內容寫入到 output.txt 文件中
readerStream.pipe(writerStream);
console.log("程序執行完畢");
三、fs文件操作模塊