/*
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('程序执行完毕');