Nodejs如何复制文件


Posted in NodeJs onMarch 09, 2016

前端童鞋都知道,javascript是没有权限操作磁盘文件的,server童鞋一向都很鄙视。但是nodejs可谓让咱们前端扬眉吐气啊,最近在学node,其强大的功能让人异常激动和兴奋。今天就学习了它怎么读写文件。

首先需要引入fs模块,这是nodejs自带的。

var fs=require("fs");
具体可参考Nodejs API:http://www.w3cfuns.com/tools.php?mod=booknodejs

主要用到了两个方法:

1、fs.readFile(filename, [encoding], [callback])

这是异步读取文件,filename是文件路径,encoding是编码格式,callback是回调函数。

异步读取一个文件的所有内容,例子如下:

fs.readFile('/etc/passwd', function (err, data) {
 if (err) throw err;
 console.log(data);
});

这里我使用的是本地测试文件:

function readFile(){
  console.log('--------开始读取文件--------');
  var fs = require('fs');
  fs.readFile('test.txt', 'utf-8', function(err, data) {
    if (err) {
      console.log("读取失败");
    } else {
      console.log(data);
      return data;
    }
  });
  console.log('--------读取结束--------');
}

2、fs.writeFile(filename, data, encoding='utf8', [callback])
写文件:

function writeFile(data){
  fs.writeFile("test2.txt",data,function(error){
    if(error){
      throw error;
    }else{
      console.log("文件已保存");  
    }
  });
}

错误代码:copyFile.js文件

var fs=require("fs");
function readFile(){
  console.log('--------开始读取文件--------');
  var fs = require('fs');
  fs.readFile('test.txt', 'utf-8', function(err, data) {
    if (err) {
      console.log("读取失败");
    } else {
      console.log(data);
      return data;
    }
  });
  console.log('--------读取结束--------');
}

function writeFile(data){
  fs.writeFile("test2.txt",data,function(error){
    if(error){
      throw error;
    }else{
      console.log("文件已保存");  
    }
  });
}
function copyFile(){
  var txt=readFile();
  writeFile(txt);
}
copyFile();

在终端运行node copyFile.js结果如下:

Nodejs如何复制文件

注意事项:

1、文件编码,开始的时候我直接在本地新建一个txt文档,读取的时候发现结果始终是aaaaaaa这样的,结果发现用编辑打开是时候里面是乱码,其次,最好带上encoding,否则它会按照buffer读取。

2、同步执行问题。

上面的代码是有问题的,我把读取文件和写入文件方法分开写的,本来是想把test.txt文件中的内容复制到test2.txt,但是读取文件是异步执行的,也就是说谁也不知道它何年马月执行完毕,所以test.txt得到的结果是undefined。

正确的方法应该是读取完毕后执行写入文件:

var fs=require("fs");
function copyFile(){
  console.log('--------开始读取文件--------');
  var fs = require('fs');
  fs.readFile('test.txt', 'utf-8', function(err, data) {
    if (err) {
      console.log("读取失败");
    } else {
      writeFile(data)
      return data;
    }
  });
  console.log('--------读取结束--------');
}

function writeFile(data){
  console.log(data);
  fs.writeFile("test2.txt",data,'utf8',function(error){
    if(error){
      throw error;
    }else{
      console.log("文件已保存");  
    }
  });
}

copyFile();

以上就是本文的全部内容,希望对大家的学习有所帮助。

NodeJs 相关文章推荐
nodejs URL模块操作URL相关方法介绍
Mar 03 NodeJs
NodeJS使用formidable实现文件上传
Oct 27 NodeJs
简单实现nodejs上传功能
Jan 14 NodeJs
Nodejs+Socket.io实现通讯实例代码
Feb 13 NodeJs
nodejs个人博客开发第六步 数据分页
Apr 12 NodeJs
详解使用nodeJs安装Vue-cli
May 17 NodeJs
详解nodejs模板引擎制作
Jun 14 NodeJs
修改Nodejs内置的npm默认配置路径方法
May 13 NodeJs
Nodejs Express 通过log4js写日志到Logstash(ELK)
Aug 30 NodeJs
nodejs基础之常用工具模块util用法分析
Dec 26 NodeJs
Nodejs实现的操作MongoDB数据库功能完整示例
Feb 02 NodeJs
使用NodeJs 开发微信公众号(三)微信事件交互实例
Mar 02 #NodeJs
nodejs 中模拟实现 emmiter 自定义事件
Feb 22 #NodeJs
nodejs修复ipa处理过的png图片
Feb 17 #NodeJs
Nodejs爬虫进阶教程之异步并发控制
Feb 15 #NodeJs
你一定会收藏的Nodejs代码片段
Feb 04 #NodeJs
Nodejs中session的简单使用及通过session实现身份验证的方法
Feb 04 #NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 #NodeJs
You might like
discuz7 phpMysql操作类
2009/06/21 PHP
PHP中文URL编解码(urlencode()rawurlencode()
2010/07/03 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
2017/11/07 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
2019/06/19 PHP
php接口隔离原则实例分析
2019/11/11 PHP
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
一个简单的瀑布流效果(主体形式自写)
2013/05/27 Javascript
Javascript获取当前日期的农历日期代码
2014/10/08 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
jQuery团购倒计时特效实现方法
2015/05/07 Javascript
JavaScript中constructor()方法的使用简介
2015/06/05 Javascript
ztree获取选中节点时不能进入可视区域出现BUG如何解决
2015/12/03 Javascript
JavaScript中this的用法及this在不同应用场景的作用解析
2017/04/13 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
vue项目上传Github预览的实现示例
2018/11/06 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
JavaScript 变量,数据类型基础实例详解【变量、字符串、数组、对象等】
2020/01/04 Javascript
vue之封装多个组件调用同一接口的案例
2020/08/11 Javascript
Python 时间处理datetime实例
2008/09/06 Python
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
让python同时兼容python2和python3的8个技巧分享
2014/07/11 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
Python3.6简单反射操作示例
2018/06/14 Python
PyQt5实现类似别踩白块游戏
2019/01/24 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
详解如何用TensorFlow训练和识别/分类自定义图片
2019/08/05 Python
Python3和pyqt5实现控件数据动态显示方式
2019/12/13 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
2020/02/11 Python
Python socket处理client连接过程解析
2020/03/18 Python
如何让IE9以下版本(ie6/7/8)认识html5元素
2013/04/01 HTML / CSS
SIXPAD智能健身仪英国官网:革命性的训练装备品牌
2018/09/27 全球购物
2014年个人技术工作总结
2014/12/08 职场文书
市场部经理岗位职责
2015/02/02 职场文书
浅谈什么是SpringBoot异常处理自动配置的原理
2021/06/21 Java/Android
详解Golang如何实现支持随机删除元素的堆
2022/09/23 Python