NodeJs FS模块(5)

目录

/*
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删除文件
*/

1. fs.stat 检测是文件仍是目录

fs.stat('css',function (err,stats) {
    if (err){
        console.log(err);
        return false
    }else{
        console.log('文件',stats.isFile());
        console.log('文件',stats.isDirectory());
    }
});

 

2. fs.mkdir 建立目录

fs.mkdir('js',function (err) {
    if (err){
        console.log(err);
        return false
    }else{
        console.log('建立文件夹成功');
    }
});

 

3. fs.writeFile 建立写入文件

fs.writeFile('t.txt','hello nodejs',function (err) {
    if (err){
        console.log(err);
        return false
    }else{
        console.log('写入文件成功');
    }
});

 

4. fs.appendFile 追加文件

fs.appendFile('t.txt','hello nodejs\n',function (err) {
    if (err){
        console.log(err);
        return false
    }else{
        console.log('追加写入文件成功');
    }
});

 

5.fs.readFile 读取文件

fs.readFile('t.txt',function (err,data) {
    if (err){
        console.log(err);
        return false
    }else{
        console.log(data.toString());
    }
});

 

6.fs.readdir 读取目录

fs.readdir('./',function (err,data) {
    if (err){
        console.log(err);
        return false
    }else{
        console.log(data);
    }
});

 

7.fs.rename 重命名

fs.rename('1.txt','tt',function (err) {
    if (err){
        console.log(err)
        return false
    }else{
        console.log('成功修改文件');
    }
});

 

8. fs.rmdir 删除目录

fs.rmdir('tt',function (err) {
    if (err) {
        console.log(err);
        return false
    }else{
        console.log('删除目录成功');
    }
});

 

9. fs.unlink 删除文件

fs.unlink('t.txt',function (err) {
    if(err) {
        console.log(err);
        return false
    }else{
        console.log('删除文件成功');
    }
});

 

文件操做demo

1.判断服务器上面有没有upload目录。没有建立这个目录。 (图片上传)

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());
    }

});

 

2. 找出html目录下面的全部的目录,而后打印出来

*** 错误写法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)
        }
});

 

11 fs.createReadStream 从文件流中读取数据

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);
});

 

12 fs.createWriteStream 写入文件

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('写入失败');
});

 

13 管道流

  管道提供了一个输出流到输入流的机制。一般咱们用于从一个流中获取数据并将数据传
递到另一个流中。
异步

 

 


  如上面的图片所示,咱们把文件比做装水的桶,而水就是文件里的内容,咱们用一根管子(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('程序执行完毕');
相关文章
相关标签/搜索