Node.js学习(5)fs文件系统

概念

全称为file system,所谓的文件系统,就是对计算机中的文件进行增删改查等操作。它是一个服务器的基础,在Node中通过fs模块来操作文件系统。

使用

fs模块是Node的核心模块,不需要下载,直接引入即可使用

var fs = require("fs")

fs中的大部分方法都为我们提供了两个版本:

  • a. 同步方法:带sync的方法
    • a) 同步方法会阻塞程序的执行
    • b) 同步方法通过返回值返回结果
  • b. 异步方法:不带sync的方法
    • a) 异步方法不会阻塞程序的执行
    • b) 异步方法都是通过回调函数来返回结果的

文件写入

简单写入

同步方法:fs.writeFileSync(file, data[, options])
异步方法:fs.writeFile(file, data[, options], callback)

fs.writeFile(file, data[, options], callback)
    --file:写入文件的路径+文件名
    --data:写入的数据
    --options:配置对象(可选参数,不常用)
        --flag:打开文件要进行的操作,默认值”w“
            "w":写入
            "a":追加
        --mode:文件的操作权限,默认值是0o666
            0o111:文件可被执行的权限
            0o222:文件被写入的权限
            0o444:文件被读取的权限
        --encoding:编码,默认值是:"utf8"
    --callback:回调函数

DEMO:

let fs = require('fs')
fs.writeFile('./test.txt','写入文件测试',{
    flag:'a'
},(err)=>{
    if(!err){
        console.log('文件写入成功')
    }else{
        console.log('文件写入失败')
    }
})

流式写入

流式文件写入适用于一些比较大的文件,可以分多次向文件中写入内容,有效避免内存溢出的问题

fs.createWriteStream(path[, options])
    --path:写入文件的位置(路径)
    --options:配置对象
        --flags:打开文件要进行的操作,默认值”w“
            "w":写入
            "a":追加
        --mode:文件的操作权限,默认值是0o666
            0o111:文件可被执行的权限
            0o222:文件被写入的权限
            0o444:文件被读取的权限
        --encoding:编码,默认值是:"utf8"
        --fd:文件描述符(文件索引),默认:null
        --autoClose:自动关闭,当文件写入完毕后自动关闭已经打开的文件,默认:true
        --emitClose:流在销毁后是否触发"close"事件。 默认:true
        --start:写入开始的位置,默认:0

DEMO:

//引入fs模块
let fs = require('fs')
//创建可写流
let ws = fs.createWriteStream('./demo.txt')
//监控流状态
ws.on('open',()=>{
    console.log('可写流打开了')
})
ws.on('close',()=>{
    console.log('可写流关闭了')
})

//写入数据
ws.write('写入第一行数据\n')
ws.write('写入第二行数据\n')
ws.write('写入第三行数据\n')

//关闭流
ws.close()

文件读取

简单文件读取

fs.readFile(path[, options], callback)
    --path:文件路径
    --options:配置对象(可选参数,不常用)
        --flag:打开文件要进行的操作,默认值”r“
            "r":读取
        --encoding:编码,默认值是:"utf8"
    --callback:回调函数

DEMO:

let {readFile} = require('fs')
readFile('./test.txt',(err,buf)=>{
    if(!err){
        console.log(buf.toString())
    }else{
        console.log(err)
    }
})

流式文件读取

流式文件读取默认一次读取64KB大小的内容,可以通过highWaterMark参数更改
http://nodejs.cn/api/fs.html#fs_fs_createreadstream_path_options

DEMO:

let {createReadStream} = require('fs')
let rs = createReadStream('./test.txt')
rs.on('open',()=>{
    console.log('可读流打开了')
})
rs.on('close',()=>{
    console.log('可读流关闭了')
})
rs.on('data',(data)=>{
    console.log(data.toString())
})

发表评论

邮箱地址不会被公开。 必填项已用*标注