zoukankan      html  css  js  c++  java
  • Node.js 文件系统

    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=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 对象。

  • 相关阅读:
    (4.3)ODBC/OLE DB/ADO概念与使用情况
    查找至少连续出现三次的所有数字/连续3天的日期【LeetCode】
    javascript 事件触发
    document.referrer
    创业公司
    关于javascript 回调函数
    promise
    javascript deferred
    document.readystate
    window---->load, document------DOMContentLoaded
  • 原文地址:https://www.cnblogs.com/chenyingying0/p/12463025.html
Copyright © 2011-2022 走看看