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使用jQuery选择器操作DOM
Feb 13 NodeJs
Nodejs实现批量下载妹纸图
May 28 NodeJs
nodejs初步体验篇
Nov 23 NodeJs
NodeJs测试框架Mocha的安装与使用
Mar 28 NodeJs
Nodejs之http的表单提交
Jul 07 NodeJs
nodejs实现大文件(在线视频)的读取
Oct 16 NodeJs
详解NODEJS的http实现
Jan 04 NodeJs
利用nodeJs anywhere搭建本地服务器环境的方法
May 12 NodeJs
nodejs取得当前执行路径的方法
May 13 NodeJs
修改Nodejs内置的npm默认配置路径方法
May 13 NodeJs
详解nodejs 配置文件处理方案
Jan 02 NodeJs
NodeJS实现一个聊天室功能
Nov 25 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
珊瑚虫IP库浅析
2007/02/15 PHP
php表单转换textarea换行符的方法
2010/09/10 PHP
解析PHP实现下载文件的两种方法
2013/07/05 PHP
php图片缩放实现方法
2014/02/20 PHP
PHP 获取ip地址代码汇总
2015/07/05 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
2017/06/07 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
浅析JavaScript中的隐式类型转换
2013/12/05 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
2014/01/07 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
javascript数组去重小结
2016/03/07 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
2016/11/11 Javascript
如何判断出一个js对象是否一个dom对象
2016/11/24 Javascript
VsCode新建VueJs项目的详细步骤
2017/09/23 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
详解redux异步操作实践
2018/08/15 Javascript
微信小程序上传图片并等比列压缩到指定大小的实例代码
2019/10/24 Javascript
浅谈TypeScript的类型保护机制
2020/02/23 Javascript
[02:40]DOTA2殁境神蚀者 英雄基础教程
2013/11/26 DOTA
Python中遇到的小问题及解决方法汇总
2017/01/11 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
python 制作简单的音乐播放器
2020/11/25 Python
Html5 web本地存储实例详解
2016/07/28 HTML / CSS
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
在线购买世界上最好的酒:BoozeBud
2018/06/07 全球购物
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
组织生活会表态发言材料
2014/10/17 职场文书
银行实习推荐信
2015/03/27 职场文书
初三毕业感言
2015/07/31 职场文书
《假如》教学反思
2016/02/17 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书
MySQL sql模式设置引起的问题
2022/05/15 MySQL