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中SSL服务的性能
Jul 15 NodeJs
nodejs中操作mysql数据库示例
Dec 20 NodeJs
nodejs URL模块操作URL相关方法介绍
Mar 03 NodeJs
nodejs中的fiber(纤程)库详解
Mar 24 NodeJs
ubuntu下安装nodejs以及升级的办法
May 08 NodeJs
详解使用nodeJs安装Vue-cli
May 17 NodeJs
浅析 NodeJs 的几种文件路径
Jun 07 NodeJs
NodeJS父进程与子进程资源共享原理与实现方法
Mar 16 NodeJs
nodejs微信开发之自动回复的实现
Mar 17 NodeJs
NodeJs操作MongoDB教程之分页功能以及常见问题
Apr 09 NodeJs
使用nodejs分离html文件里的js和css详解
Apr 12 NodeJs
nodejs利用readline提示输入内容实例代码
Jul 15 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
PHP通过COM使用ADODB的简单例子
2006/12/31 PHP
浅析关于PHP位运算的简单权限设计
2013/06/30 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
javascript中cookie对象用法实例分析
2015/01/30 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
2015/08/23 Javascript
自己动手写的javascript前端等待控件
2015/10/30 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
2016/10/11 Javascript
基于vue-upload-component封装一个图片上传组件的示例
2018/10/16 Javascript
vue项目中实现图片预览的公用组件功能
2018/10/26 Javascript
解决mui框架中switch开关通过js控制开或者关状态时小圆点不动的问题
2019/09/03 Javascript
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
2020/02/14 Javascript
JavaScript ES6 Class类实现原理详解
2020/05/08 Javascript
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
解决Vue + Echarts 使用markLine标线(precision精度问题)
2020/07/20 Javascript
js实现右键弹出自定义菜单
2020/09/08 Javascript
[02:45]DOTA2英雄敌法师基础教程
2013/11/25 DOTA
[03:42]2014DOTA2西雅图国际邀请赛 Navi战队巡礼
2014/07/07 DOTA
python中的全局变量用法分析
2015/06/09 Python
python实现求解列表中元素的排列和组合问题
2018/03/15 Python
详解如何用TensorFlow训练和识别/分类自定义图片
2019/08/05 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
2014/05/07 HTML / CSS
美体小铺美国官网:The Body Shop美国
2017/11/10 全球购物
干部培训自我鉴定
2014/01/22 职场文书
业绩考核岗位职责
2014/02/01 职场文书
求职简历自荐信
2014/06/18 职场文书
工程部主管岗位职责
2015/02/12 职场文书
退休教师欢送会致辞
2015/07/31 职场文书
一年级下册数学教学反思
2016/02/16 职场文书
关于战胜挫折的名言警句大全!
2019/07/05 职场文书
Nginx如何配置Http、Https、WS、WSS的方法步骤
2021/05/11 Servers
Nginx源码编译安装过程记录
2021/11/17 Servers
java开发双人五子棋游戏
2022/05/06 Java/Android