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实现的一个静态服务器实例
Dec 06 NodeJs
NodeJS中利用Promise来封装异步函数
Feb 25 NodeJs
Nodejs中解决cluster模块的多进程如何共享数据问题
Nov 10 NodeJs
nodejs读写json文件的简单方法(必看)
Mar 09 NodeJs
nodejs+websocket实时聊天系统改进版
May 18 NodeJs
nodeJS实现简单网页爬虫功能的实例(分享)
Jun 08 NodeJs
nodejs实现的简单web服务器功能示例
Mar 15 NodeJs
nodejs前端模板引擎swig入门详解
May 15 NodeJs
nodejs express配置自签名https服务器的方法
May 22 NodeJs
深入理解NodeJS 多进程和集群
Oct 17 NodeJs
nodejs中实现用户注册路由功能
May 20 NodeJs
nodeJs项目在阿里云的简单部署
Nov 27 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实现文件上传下载实例
2016/10/18 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
2020/06/05 PHP
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
2015/08/06 Javascript
js实现文字闪烁特效的方法
2015/12/17 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
详解Vue源码学习之callHook钩子函数
2018/07/25 Javascript
Promise.all中对于reject的处理方法
2018/08/01 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
2019/12/12 Javascript
基于html+css+js实现简易计算器代码实例
2020/02/28 Javascript
微信小程序点击item使之滚动到屏幕中间位置
2020/03/25 Javascript
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
详解python中asyncio模块
2018/03/03 Python
sublime python3 输入换行不结束的方法
2018/04/19 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
2019/04/27 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
python中upper是做什么用的
2020/07/20 Python
Python的信号库Blinker用法详解
2020/12/31 Python
YOOX美国官方网站:全球著名的多品牌时尚网络概念店
2016/09/11 全球购物
植物选择:Botanic Choice
2017/02/15 全球购物
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
Bibloo罗马尼亚网站:女装、男装、童装及鞋子和配饰
2019/07/20 全球购物
施华洛世奇巴西官网:SWAROVSKI巴西
2019/12/03 全球购物
简历中求职的个人自我评价
2013/12/03 职场文书
我的求职计划书
2014/01/10 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
故意杀人案辩护词
2015/05/21 职场文书
朋友离别感言
2015/08/04 职场文书
社区结对共建协议书
2016/03/23 职场文书
jquery插件实现悬浮的菜单
2021/04/24 jQuery
css背景和边框标签实例详解
2021/05/21 HTML / CSS
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技