zoukankan      html  css  js  c++  java
  • Node.js内置的文件系统模块(fs)

    异步读取文件

    按照js的标准,异步读取一个文本文件的格式如下:

    'use strict'
    
    const fs = require('fs')
    
    fs.readFile('test.txt', 'utf-8', function(err, data){
        if(err){
            cconsole.log(err)
        }else{
            console.log(data)
        }
    })
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    请注意,test.txt文件必须在当前目录下,且文件编码必须为utf-8

    如果我们读取的文件不是文本文件,而是二进制文件,怎么办呢? 
    下面演示如何读取一个图片文件:

    'use strict'
    
    const fs = rquire('fs')
    
    fs.readFile('test.png', function(err, data){
        if(err){
            console.log(err)
        }else{
            console.log(data)
            console.log(data.length + 'bayes')
        }
    })
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    当读取二进制文件时,不传入文件编码时,回调函数的data参数将返回一个buffer对象。在Node.js中,buffer 对象可以和String做转换,例如,把一个buffer转化成String

    var text = data.toString('utf-8')
    • 1

    String转化为Buffer

    var buf = new Buffer('text', 'uft-8')
    • 1

    同步读取文件

    fs 模块也提供相应的同步读取文件函数。与异步相比,多了一个Sync后缀,并且不接受回调函数,函数直接返回结果。 
    fs 模块同步读取文件如下:

    'use strict'
    
    const fs = require('fs')
    
    var data = fs.readFileSync('test'.txt, 'utf-8')
    • 1
    • 2
    • 3
    • 4
    • 5

    如果同步读取文件失败,则需要使用try...catch 捕获该错误。

    try{
        var data = fs.readFileSync('test.txt', 'utf-8')
    }catch(err){
        // 出错了
    }
    • 1
    • 2
    • 3
    • 4
    • 5

    写文件

    例如:

    'use strict'
    
    const fs = require(''fs)
    
    fs.writeFile('test.txt', data, function(err){
        if(err){
            console.log(err)
        }else{
            console.log('ok')
        }
    })
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    writeFile 方法的参数依次是文件名,数据和回调函数。如果传入的数据类型是String ,默认按UTF-8编码写入文件,如果传入的数据类型是Buffer,则写入的是二进制文件。回调函数只关心成功与否,因为需要一个err参数。

    和 readFile类似,writeFile也有一个同步的方法,叫writeFileSync,例如:

    const data = 'Hello,Node.js'
    writeFileSync('test.txt', data)
    • 1
    • 2

    stat

    如果我们要获取文件的大小,创建时间等信息,可以使用fs.stat(),它返回的是一个Stat对象,能告诉我们文件或者目录的详细信息。

    'use strict'
    
    const fs = require('fs')
    
    fs.stat('test.txt', function(err, stat){
        if(err){
            console.log(err)
        } else {
            // 是否是文件
            console.log('isFile:' + stat.isFile())
    
            // 是否是目录
            console.log('isDir' + stat.isDirectory())
    
            if(stat.isFile()){
                // 文件大小
                console.log('size:' + stat.size)
    
                // 创建时间
                console.log('crateTime:' + stat.birthtime)
    
                // 修改时间
                console.log('modifiedTime:' + stat.mtime)
            }
        }
    })
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    运行结果如下:

    isFile: true
    isDirectory: false
    size: 181
    crateTime: Fri Dec 11 2015 09:43:41 GMT+0800 (CST)
    modifiedTime: Fri Dec 11 2015 12:09:00 GMT+0800 (CST)
    • 1
    • 2
    • 3
    • 4
    • 5

    stat也有一个同步的方法,这里就不多做叙述了。


    由于Node.js环境执行的JavaScript代码是服务器代码,所以,绝大多数需要在服务器执行复杂的逻辑代码,所以必须使用异步代码,否则,同步代码在执行时,服务器停止响应,因为JavaScript只有一个执行线程。

  • 相关阅读:
    kali linux DVWA config 问题解决方案
    HashMap&线程
    Synchronized和java.util.concurrent.locks.Lockde区别联系
    线程池
    信息嗅探
    java子类对象和成员变量的隐写&方法重写
    Java中Super和final关键字以及异常类
    523. Continuous Subarray Sum
    494. Target Sum
    477. Total Hamming Distance
  • 原文地址:https://www.cnblogs.com/shuaishuaidejun/p/8202925.html
Copyright © 2011-2022 走看看