Node - fs(文件系统)

後來 -
Node - fs(文件系统)
什么是fs(文件系统)file system在Node中,与文件的交互是非常重要的,服务器的本质就是将本地的文件发送给远程的客户端Node通过fs模块来和文件系统进行交互该模块提供了一些标准文件访问API来打开,读取,写入文件,以及其他的交互Node中使用fs模块,const fs = require('fs')fs中的同步和异步fs模块中的所有操作都有两种操作形式,即同步和异步同步文件系统会阻塞系统的执行,也就是除非操作完成,否则代码不会往下继续执行了异步文件系统不会阻塞程序的执行,而是在操作完成是,通过回调函数将结果返回fs的使用文件写入

手动操作的步骤

打开文件

同步:fs.openSync(path[, flags[, mode]])

path:要打开的文件的路径

flags:打开文件要做的操作类型(下面会详细介绍有多一些操作类型)

r:只读的w:可写的a: 追加mode:可选值,是设置文件的操作权限,一般不传该方法会返回一个文件的描述符作为结果,我们可以通过该描述符来对文件进行各种操作

异步:fs.open(path[, flags[, mode]], callback)

callback:两个返回参数

err:错误对象,如果没有就是nullfa:文件的描述符

向文件中写入内容

同步:fs.writeSync(fd, string[, position[, encoding]])

fd:文件的描述符,需要传递要写入的描述符string:要写入的内容position:一般不写,表示写入的起始位置encoding:一般不写,表示编码,默认utf-8异步:fs.write(fd, string[, position[, encoding]], callback)

保存并关闭文件

fs.closeSync(fd)

fd:要关闭文件的描述符fs.close(fd[, callback])
// 同步写入文件

const fs = require('fs')
// 打开文件
let fd = fs.openSync('demo.txt','w')
// 写入文件
fs.writeSync(fd, "仙剑奇侠传三")
// 关闭文件
fs.closeSync(fd)
// 异步写入文件

const fs = require('fs')

// 打开文件
fs.open('demo2.txt','w',function(err,fd) {
    if(!err) {
         // 写入文件
        fs.write(fd,'爱情公寓',function(err) {
            if(!err) {
                console.log('写入成功')
            }
            // 关闭文件
            fs.close(fd,function(err) {
                if(!err) {
                    console.log('已保存并关闭文件')
                }
            })
        })
    }else{
        console.log('出错了')
    }
})

简单文件写入

同步:fs.writeFileSync(file, data[, options])

异步:fs.writev(fd, buffers[, position], callback)

file:要操作的文件的路径data:要写入的数据

options:可选,可以对写入进行一些设置,是一个对象,有三个值

encoding:编码。默认 'utf8'mode:文件权限。默认 0o666flag:文件只读还是可写。默认 'w' (下面会详细介绍有多一些操作类型)

callback:当写入完成以后,执行

// 简单文件写入

const fs = require('fs')

// 异步
fs.writeFile('demo3.txt','景天和雪见',function(err) {
if(!err){
console.log('写入成功')
}
})
// 同步
fs.writeFileSync('demo4.txt','紫萱和徐长卿')    

流式文件写入

同步,异步,简单文件写入都不适合大文件写入,所以有了流式文件写入

用法:创建一个可写流,fs.createWriteStream(path[, options])

// 流式文件写入

const fs = require('fs')

// 创建一个可写流
let ws = fs.createWriteStream('demo.txt')
// 通过ws想文件中输出内容
ws.write("通过可写流写入的内容")
// 关闭流,不能用ws.close(),不然文件传不完
ws.end()

flag: 文件操作类型有哪些

r:读取文件,文件不存在则出现异常r+:读写文件,文件不存在则出现异常rs:在同步模式下打开文件用于读取rs+:在同步模式下打开文件用于读写w:打开文件用于写操作,如果不存在则创建,如果存在则截断,截断即覆盖全部wx:打开文件用于写操作,如果存在则打开失败w+: 打开文件用于读写,如果不存在则创建,如果存在则截断wx+:打开文件用于读写,如果存在则打开失败a:打开文件用于追加,如果不存在则创建ax:打开文件用于追加,如果路径存在则失败a+:打开文件进行读取和最佳,如果不存在则创建ax+:打开文件进行读取和追加,如果路径存在则失败文件读取

简单文件读取

同步:fs.readFileSync(path[, options])

异步:fs.readFile(path[, options], callback)

callback(err,data)

err:错误对象

data:读取到的数据,是一个Buffer,为什么是Buffer呢?因为读取到的不一定是字符串,可能是图片,音频等。Buffer的通用性更高。字符串的话可以用toString读取数据

// 简单文件读取

const fs = require('fs')

fs.readFile('demo.txt',function(err,data) {
if(!err) {
console.log(data)
console.log(data.toString())
}
})

流式文件读取

同样适用于大文件

用法:fs.createReadStream(path[, options])

// 流式读取文件

const fs = require('fs')

// 创建一个可读流
let rs = fs.createReadStream('demo.txt')
// 读取可读流中的数据,必须要可读流绑定一个data事件,data事件绑定完毕,他会自动读取数据
rs.on('data',function(data) {
console.log(data)
console.log(data.toString())
})

// 如果我们想把读取到数据写到另一个文件当中
let ws = fs.createWriteStream('demo1.txt')
// 使用pipe(管道),会直接输入到ws中
rs.pipe(ws)
特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

Tags 标签

node.jsfs文件系统

扩展阅读

加个好友,技术交流

1628738909466805.jpg