zoukankan      html  css  js  c++  java
  • node基础-文件系统-文件写操作

    文件操作频率最高的就是读跟写。nodejs的文件的读取API在《node基础-文件系统-读取文件》里已经简单介绍过,本文就简单介绍下nodejs的文件写API。

    nodejs的文件操作均提供了同步、异步两种方式,写操作也是同样的,常用的两个接口为fs.writeFile(异步)、fs.writeFileSync(同步),下面就来看看他们的使用以及区别。

    fs.writeFile(filename, data, [options], callback)

    先来看下API说明

    /**
     * 往文件里异步写数据,写入的内容可以是字符串,也可以是二进制数据。
     * 如果文件不存在,则创建;如果文件已存在,那么内容会被覆盖
     * @param {String} filename 文件名
     * @param {String|Buffer} data 要往文件里写的内容,可以是字符串,也可以是二进制数据。当为二进制数据时候,options.encoding 会被忽略
     * @param {Object} [options]
     * @param {String} options.encoding 编码,默认是utf8
     * @param {Number} options.mode=438 模式
     * @param {String} options.flag=w 写文件的模式
     * @param {Function} callback 回调方法
     */
    fs.writeFile(filename, data, [options], callback)

    接下来我们来看看实际例子,首先,需要引入fs,下面为节省篇幅就不再贴这行代码了

    var fs = require('fs');

     

    例子一:往不存在的文件里写内容

    往一个不存在的文件里写内容,则会先创建该文件,再往里面写内容

    var noneExistFileName = ['async_create.', new Date()-0, '.txt'].join('');
    fs.writeFile(noneExistFileName, '文件不存在,则创建', function(err){
        if(err) throw err;
        console.log(noneExistFileName+'不存在,被创建了!');
    });

     

    例子二:往存在的文件里写内容

    如果该文件已存在,则原有文件内容会北覆盖

    fs.writeFile('async_exists.txt', '文件已存在,则覆盖内容 -- '+(new Date()-0), function(err){
        if(err) throw err;
        console.log('exists.txt已存在,内容被覆盖!');
    });

     

    例子三:往已经存在的文件里追加内容

    options.flag 设置为 'a' 时,则会将写模式变为追加内容

    fs.writeFile('async_add.txt', '
    文件已存在,并追加内容 -- '+(new Date()-0), {
        flag: 'a'
    }, function(err){
        if(err) throw err;
        console.log('exists.txt已存在,内容被覆盖!');
    });

     fs.writeFileSync(filename, data, [options])

    写文件的同步版本,同样先来看下API说明,你会发现跟fs.writeFile 没啥区别,就是少了个回调

    /**
     * 文件同步写接口,是fs.writeFile的同步版本,参数也差不多
     * @param {String} filename 文件名
     * @param {String|Buffer} data 要往文件里写的内容,可以是字符串,也可以是二进制数据。当为二进制数据时候,options.encoding 会被忽略
     * @param {Object} [options]
     * @param {String} options.encoding 编码,默认是utf8
     * @param {Number} options.mode=438 模式
     * @param {String} options.flag=w 写文件的模式
     */
    fs.writeFileSync(filename, data, [options])

    下面我们看下具体例子

     

    例子一:往不存在的文件里写内容,则创建该文件

    // case 1:往不存在的文件里写内容,则创建该文件
    var noneExistFileName = ['sync_create.', new Date()-0, '.txt'].join('');
    fs.writeFile(noneExistFileName, '文件不存在,则创建');

     

    例子二:往存在的文件里写内容,原有内容被覆盖

    fs.writeFile('sync_exists.txt', '文件已存在,则覆盖内容 -- '+(new Date()-0));

     

    例子三:往已经存在的文件里追加内容

    fs.writeFile('sync_add.txt', '
    文件已存在,并追加内容 -- '+(new Date()-0), {
        flag: 'a'
    });

    完整示例

    demo下载请点击,将代码随便解压缩到任意目录下,然后在该目录下运行命令 node writefile.js 即可

    /**
     * 文件写入demo,by 程序猿小卡
     */
    var fs = require('fs');
    
    /**
     * 往文件里异步写数据,写入的内容可以是字符串,也可以是二进制数据。
     * 如果文件不存在,则创建;如果文件已存在,那么内容会被覆盖
     * @param {String} filename 文件名
     * @param {String|Buffer} data 要往文件里写的内容,可以是字符串,也可以是二进制数据。当为二进制数据时候,options.encoding 会被忽略
     * @param {Object} [options]
     * @param {String} options.encoding 编码,默认是utf8
     * @param {Number} options.mode=438 模式
     * @param {String} options.flag=w 写文件的模式
     * @param {Function} callback 回调方法
     */
    // fs.writeFile(filename, data, [options], callback)
    
    // case 1:往不存在的文件里写内容,则创建该文件
    var noneExistFileName = ['async_create.', new Date()-0, '.txt'].join('');
    fs.writeFile(noneExistFileName, '文件不存在,则创建', function(err){
        if(err) throw err;
        console.log(noneExistFileName+'不存在,被创建了!');
    });
    
    // case 2:往存在的文件里写内容,原有内容被覆盖
    fs.writeFile('async_exists.txt', '文件已存在,则覆盖内容 -- '+(new Date()-0), function(err){
        if(err) throw err;
        console.log('exists.txt已存在,内容被覆盖!');
    });
    
    // case 3:往已经存在的文件里追加内容
    fs.writeFile('async_add.txt', '
    文件已存在,并追加内容 -- '+(new Date()-0), {
        flag: 'a'
    }, function(err){
        if(err) throw err;
        console.log('exists.txt已存在,内容被覆盖!');
    });
    
    /**
     * 文件同步写接口,是fs.writeFile的同步版本,参数也差不多
     * @param {String} filename 文件名
     * @param {String|Buffer} data 要往文件里写的内容,可以是字符串,也可以是二进制数据。当为二进制数据时候,options.encoding 会被忽略
     * @param {Object} [options]
     * @param {String} options.encoding 编码,默认是utf8
     * @param {Number} options.mode=438 模式
     * @param {String} options.flag=w 写文件的模式
     */
    // fs.writeFileSync(filename, data, [options])
    
    // case 1:往不存在的文件里写内容,则创建该文件
    var noneExistFileName = ['sync_create.', new Date()-0, '.txt'].join('');
    fs.writeFile(noneExistFileName, '文件不存在,则创建');
    
    // case 2:往存在的文件里写内容,原有内容被覆盖
    fs.writeFile('sync_exists.txt', '文件已存在,则覆盖内容 -- '+(new Date()-0));
    
    // case 3:往已经存在的文件里追加内容
    fs.writeFile('sync_add.txt', '
    文件已存在,并追加内容 -- '+(new Date()-0), {
        flag: 'a'
    });

    写在后面

    官方文档请点击 

    本文如有错漏,请指出 :)

  • 相关阅读:
    Access更新数据
    linux如何修改主机名
    实习一个月
    网络游戏开发过程(转)
    实习
    不可征服曼德拉
    作为一个河南人
    屌丝男关于游戏市场的一些想法
    实习2周
    一个C/S结构的优秀例子: 延迟补偿在C/S架构游戏协议设计和优化中的应用
  • 原文地址:https://www.cnblogs.com/chyingp/p/node-guide-file-write.html
Copyright © 2011-2022 走看看