/*
1. fs.stat 檢測是文件仍是目錄
2. fs.mkdir 建立目錄
3. fs.writeFile 建立寫入文件
4. fs.appendFile 追加文件
5.fs.readFile 讀取文件
6.fs.readdir讀取目錄
7.fs.rename 重命名
8. fs.rmdir 刪除目錄
9. fs.unlink刪除文件
*/
fs.stat('css',function (err,stats) { if (err){ console.log(err); return false }else{ console.log('文件',stats.isFile()); console.log('文件',stats.isDirectory()); } });
fs.mkdir('js',function (err) { if (err){ console.log(err); return false }else{ console.log('建立文件夾成功'); } });
fs.writeFile('t.txt','hello nodejs',function (err) { if (err){ console.log(err); return false }else{ console.log('寫入文件成功'); } });
fs.appendFile('t.txt','hello nodejs\n',function (err) { if (err){ console.log(err); return false }else{ console.log('追加寫入文件成功'); } });
fs.readFile('t.txt',function (err,data) { if (err){ console.log(err); return false }else{ console.log(data.toString()); } });
fs.readdir('./',function (err,data) { if (err){ console.log(err); return false }else{ console.log(data); } });
fs.rename('1.txt','tt',function (err) { if (err){ console.log(err) return false }else{ console.log('成功修改文件'); } });
fs.rmdir('tt',function (err) { if (err) { console.log(err); return false }else{ console.log('刪除目錄成功'); } });
fs.unlink('t.txt',function (err) { if(err) { console.log(err); return false }else{ console.log('刪除文件成功'); } });
fs.stat('upload',function (err,stats) { if (err){ // 不存在目錄 fs.mkdir('upload',function (err) { if (err){ console.log(err); return false } }); console.log('文件不存在') }else{ console.log('文件已經存在'); console.log(stats.isDirectory()); } });
*** 錯誤寫法css
fs.readdir('html',function (err,files) { if (err){ console.log(err); return false }else{ // console.log(files) # 打印全部的文件和文件夾 for (var i= 0 ; i<files.length;i++){ // console.log(files[i]); //此處也能夠打印出全部的目錄名和文件名' //檢測是否目錄仍是文件 錯誤寫法 fs.stat('html'+files[i],function (err,stats) { console.log(files[i]); // 此處不能打印出目錄名和文件名 }) } } });
執行結果html
錯誤緣由:node
1 fs.stat 檢測目錄和文件是屬於異步方法,所以在fs.stat中是無法獲取到準確的files[i];數據庫
使用setTimeout(異步函數)執行錯誤現象服務器
for (let i = 0; i <3; i++) { setTimeout(function (i) { console.log(i); },100) }
題目的正確解法app
var filesArr =[]; fs.readdir('html',function (err,files) { if (err){ console.log(err); }else{ // console.log(files) //此處也能夠打印出全部的目錄名和文件名' //檢測是否目錄仍是文件 (function getFile(i) { //自執行函數 if (i===files.length){ //遞歸結束條件 console.log('目錄文件以下:'); console.log(filesArr); return false } fs.stat('html/'+files[i],function (err,stats) { // console.log(files[i]); // 此處不能打印出目錄名和文件名 if (stats.isDirectory()){ filesArr.push(files[i]); } // 函數回調 // *** 必須放在此處,須要等待異步fs.stat方法執行完畢,才能回調 getFile(i+1) }); })(0) } });
const fs = require('fs'); // 流的方式 讀取input.txt文件 var readStream = fs.createReadStream('input.txt'); var str =''; //保存數據 var count = 0; // 統計讀取流的次數 // 讀取數據事件 data readStream.on('data',function (chunk) { str += chunk; count++; }); // 讀取完成事件 on readStream.on('end',function (chunk) { console.log(count); console.log(str); }); // 讀取失敗事件 error readStream.on('error',function (err) { console.log(err); });
const fs = require('fs'); var data = '我是從數據庫獲取的數據,我要保存起來11\n'; // 流的方式 寫入output.txt文件 var writeStream = fs.createWriteStream('output.txt'); // 循環寫入 for (let i = 0; i <100 ; i++) { writeStream.write(data,'utf8') } // 標記寫入完成 writeStream.end(); // 寫入完成事件 finish writeStream.on('finish',function () { console.log('寫入文件完成'); }); // 寫入錯誤事件 error writeStream.on('error',function () { console.log('寫入失敗'); });
管道提供了一個輸出流到輸入流的機制。一般咱們用於從一個流中獲取數據並將數據傳
遞到另一個流中。異步
如上面的圖片所示,咱們把文件比做裝水的桶,而水就是文件裏的內容,咱們用一根管子(pipe)鏈接兩個桶使得水從一個
桶流入另外一個桶,這樣就慢慢的實現了大文件的複製過程。
如下實例咱們經過讀取一個文件內容並將內容寫入到另一個文件中。 函數
var fs =require('fs'); // 建立一個可讀流 var readStream = fs.createReadStream('input.txt'); // 建立一個可寫流 var writeStream = fs.createWriteStream('output.txt'); // 管道操做 // 讀取input.txt文件中的內容,並將內容存入到output.txt文件中 readStream.pipe(writeStream); console.log('程序執行完畢');