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的前后端分离的思考与实践(二)模版探索
Sep 26 NodeJs
nodejs通过phantomjs实现下载网页
May 04 NodeJs
NodeJS使用formidable实现文件上传
Oct 27 NodeJs
使用nodejs下载风景壁纸
Feb 05 NodeJs
nodejs入门教程五:连接数据库的方法分析
Apr 24 NodeJs
nodejs 搭建简易服务器的图文教程(推荐)
Jul 18 NodeJs
浅谈nodejs中的类定义和继承的套路
Jul 26 NodeJs
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
Jan 05 NodeJs
修改Nodejs内置的npm默认配置路径方法
May 13 NodeJs
nodejs 如何手动实现服务器
Aug 20 NodeJs
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
Aug 20 NodeJs
nodejs中内置模块fs,path常见的用法说明
Nov 07 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获得用户使用的代理服务器ip即真实ip
2006/12/31 PHP
PHP Squid中可缓存的动态网页设计
2008/09/17 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
php数据访问之增删改查操作
2016/05/09 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
JavaScript进阶教程(第四课第一部分)
2007/04/05 Javascript
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
javascript 定义初始化数组函数
2009/09/07 Javascript
jquery.validate的使用说明介绍
2013/11/12 Javascript
JS中怎样判断undefined(比较不错的方法)
2014/03/27 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
javascript根据时间生成m位随机数最大13位
2014/10/30 Javascript
jquery 中ajax执行的优先级
2015/06/22 Javascript
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
2016/11/03 Javascript
Node.js使用NodeMailer发送邮件实例代码
2017/03/06 Javascript
angularjs实现柱状图动态加载的示例
2017/12/11 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
2018/10/19 Javascript
利用Python读取txt文档的方法讲解
2018/06/23 Python
python中for循环把字符串或者字典添加到列表的方法
2019/07/20 Python
解决Django layui {{}}冲突的问题
2019/08/29 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
2020/01/04 Python
python orm 框架中sqlalchemy用法实例详解
2020/02/02 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
Python处理PDF与CDF实例
2020/02/26 Python
Xadmin+rules实现多选行权限方式(级联效果)
2020/04/07 Python
CSS3 倾斜的网页图片库实例教程
2009/11/14 HTML / CSS
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
工程地质勘察专业大学生求职信
2013/10/13 职场文书
顶撞领导检讨书
2014/01/29 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
物流专业求职信
2014/06/30 职场文书
小学班主任自我评价
2015/03/11 职场文书
副校长2015年教育教学工作总结
2015/07/27 职场文书
Redis唯一ID生成器的实现
2022/07/07 Redis