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 后缀名判断限制代码
Mar 31 NodeJs
NodeJS 模块开发及发布详解分享
Mar 07 NodeJs
windows系统下简单nodejs安装及环境配置
Jan 08 NodeJs
nodejs实现黑名单中间件设计
Jun 17 NodeJs
nodejs批量修改文件编码格式
Jan 22 NodeJs
nodejs实现获取当前url地址及url各种参数值
Jun 25 NodeJs
windows下安装nodejs及框架express
Aug 07 NodeJs
Nodejs下用submit提交表单提示cannot post错误的解决方法
Nov 21 NodeJs
nodejs项目windows下开机自启动的方法
Nov 22 NodeJs
nodejs实现截取上传视频中一帧作为预览图片
Dec 10 NodeJs
基于nodejs的雪碧图制作工具的示例代码
Nov 05 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 引用是个坏习惯
2010/03/12 PHP
php设计模式 State (状态模式)
2011/06/26 PHP
PHP引用(&)各种使用方法实例详解
2014/03/20 PHP
php获取表单中多个同名input元素的值
2014/03/20 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
2016/10/08 PHP
微信公众号开发客服接口实例代码
2016/10/21 PHP
浅谈PHP中try{}catch{}的使用方法
2016/12/09 PHP
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
jquery select下拉框操作的一些说明
2010/04/02 Javascript
JS生成随机字符串的多种方法
2014/06/10 Javascript
Javascript基础教程之数组 array
2015/01/18 Javascript
jquery调整表格行tr上下顺序实例讲解
2016/01/09 Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
2016/05/18 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
2017/06/05 Javascript
jQuery实现键盘回车搜索功能
2017/07/25 jQuery
JS去掉字符串末尾的标点符号及删除最后一个字符的方法
2017/10/24 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
python中如何使用朴素贝叶斯算法
2017/04/06 Python
python删除字符串中指定字符的方法
2018/08/13 Python
在python里从协程返回一个值的示例
2019/02/19 Python
python中yield的用法详解——最简单,最清晰的解释
2019/04/04 Python
使用AJAX和Django获取数据的方法实例
2020/10/25 Python
python3定位并识别图片验证码实现自动登录功能
2021/01/29 Python
了解AppleTalk协议吗
2014/04/01 面试题
Why we need EJB
2016/10/20 面试题
竞争性谈判邀请书
2014/02/06 职场文书
团日活动总结
2014/04/28 职场文书
党员民主生活会对照检查材料思想汇报
2014/09/28 职场文书
2014年民警工作总结
2014/11/25 职场文书
安全承诺书格式范本
2015/04/28 职场文书
晚会开场白和结束语
2015/05/29 职场文书
九年级历史教学反思
2016/02/19 职场文书