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

    1.fs.Stats 类

    fs.Stats类的实例是记录一个文件的基本信息,该实例可以由fs.stat(path,callback)、fs.lstat(path,callback)和fs.fstat(fd,callback)获取,fd是文件描述符,可以通过fs.open来获取。

    获取文件的大小:

    var diskPath = './user/'+'5832323914'+ '/2018-01-25';
    var filename= diskPath +'/_1_.json';
    var fileStats = fs.statSync(filename);
    console.log("fileStats is",fileStats.size); //1

    对这个文件通过fs.createWriteStream新建了流,这个文件的大小为0。

    var writableStream = fs.createWriteStream(filename);
    var fileStats = fs.statSync(filename);
    console.log("fileStats is",fileStats.size);

    即使是写入内容也为0:

    var writableStream = fs.createWriteStream(filename);
    writableStream.write('xx');
    writableStream.end();
    writableStream.destroy();
    var fileStats = fs.statSync(filename);
    console.log("fileStats is",fileStats.size);  //0

     解决方式:

    setImmediate(function(){
        var fileStats = fs.statSync(filename);
        console.log("fileStats is",fileStats.size);
    });  //2

    2.buffer类

    buffer也有长度,看代码:

     var str = "5oiiiiiiii";
     //<Buffer 35 6f 69 69 69 69 69 69 69 69>
     console.log(new Buffer(str));
     //10
     console.log(new Buffer(str).length);
     //7
     console.log(Buffer.byteLength(str,'base64'));
     //5
     console.log(Buffer.byteLength(str,'hex'));

    3.读取文件,并且按照行进行处理

    Mime.prototype.load = function(file) {
      this._loading = file;
      // Read file and split into lines
      var map = {},
          content = fs.readFileSync(file, 'ascii'),
          lines = content.split(/[
    ]+/);
    
      lines.forEach(function(line) {
        // Clean up whitespace/comments, and split into fields
        var fields = line.replace(/s*#.*|^s*|s*$/g, '').split(/s+/);
        map[fields.shift()] = fields;
      });
    
      this.define(map);
    
      this._loading = null;
    };

    4.nodejs读取数据库的一种写法

    /*来源于express-session*/
    MySQLStore.prototype.createDatabaseTable = function(cb) {
    
        debug_log('Creating sessions database table');
    
        var fs = require('fs');
        /**读取当前目录下上级目录中的schema.sql中sql语句*/
        /**
    
            CREATE TABLE IF NOT EXISTS `sessions` (
          `session_id` varchar(255) COLLATE utf8_bin NOT NULL,
          `expires` int(11) unsigned NOT NULL,
          `data` text,
          PRIMARY KEY (`session_id`)
        ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin
    
        */
        fs.readFile(__dirname + '/../schema.sql', 'utf-8', function(error, sql) {
    
            if (error) {
                return cb(error);
            }
              // '??' 变成 ??
            sql = sql.replace(/`[^`]+`/g, '??');
    
            var params = [
                this.options.schema.tableName,
                this.options.schema.columnNames.session_id,
                this.options.schema.columnNames.expires,
                this.options.schema.columnNames.data,
                this.options.schema.columnNames.session_id
            ];
            //创建sessions表,有列session_id,expires,data
            this.connection.query(sql, params, function(error) {
    
                if (error) {
                    debug_error('Failed to create sessions database table.');
                    debug_error(error);
                    return cb && cb(error);
                }
    
                cb && cb();
            });
    
        }.bind(this));
    };
     

    5.fs.writeFile

    异步地写入数据到文件,如果文件已经存在则替代文件。 data 可以是一个字符串或一个 buffer,可以拷贝图片。如:

    request.get(option, function(err, response, body) {
         //option.url为图片的URL
         if (err) {
             throw new Exception("30101", "微信下载图片失败"); 
         } else {
        //console.log("微信下载图片", filePath);
        //response.body在图片编码,可能是二进制,也可能是base64            
        fs.writeFile(filePath, response.body, {
           encoding: null
        }, function(err) {}
        }
    }
    如果字符串要换行: str + ' ';即可

    writeFile只能读取小文件,如果要读取大文件,需要用到fs.readStream。可以参考:https://www.cnblogs.com/fengmk2/archive/2011/08/16/2140460.html

    6.验证文件存在

    fs.existsSync(path) 异步版本已经废弃,目前只能用同步版本了。

  • 相关阅读:
    FPGA-中值滤波
    FPGA-中值滤波
    FPGA-shift_ram代码
    FPGA实现-shift_ram_3x3矩阵实现
    图像处理-中值滤波
    python-str
    ignore-certificate-errors(chrome)
    selenium-python-Cookie跳过登录验证码
    Angular2
    Angular2
  • 原文地址:https://www.cnblogs.com/liuyinlei/p/6915504.html
Copyright © 2011-2022 走看看