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服务器(4):路由
Dec 18 NodeJs
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
Jan 01 NodeJs
NodeJS学习笔记之Connect中间件应用实例
Jan 27 NodeJs
Nodejs+Socket.io实现通讯实例代码
Feb 13 NodeJs
详解nodejs微信公众号开发——4.自动回复各种消息
Apr 11 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
nodejs模块学习之connect解析
Jul 05 NodeJs
nodejs创建简易web服务器与文件读写的实例
Sep 07 NodeJs
nodejs微信扫码支付功能实现
Feb 17 NodeJs
基于Nodejs的Tcp封包和解包的理解
Sep 19 NodeJs
nodejs图片处理工具gm用法小结
Dec 12 NodeJs
NodeJs 实现简单WebSocket即时通讯的示例代码
Aug 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文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
jQuery图片轮播的具体实现
2013/09/11 Javascript
回车直接实现点击某按钮的效果即触发单击事件
2014/02/27 Javascript
自己实现ajax封装示例分享
2014/04/01 Javascript
jQuery实用函数用法总结
2014/08/29 Javascript
JavaScript中的类数组对象介绍
2014/12/30 Javascript
jquery获取url参数及url加参数的方法
2015/10/26 Javascript
JavaScript实现垂直滚动条效果
2017/01/18 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
JavaScript实现获取远程的html到当前页面中
2017/03/26 Javascript
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
AngularJS基于provider实现全局变量的读取和赋值方法
2017/06/28 Javascript
canvas+gif.js打造自己的数字雨头像的示例代码
2017/10/26 Javascript
JS实现select选中option触发事件操作示例
2018/07/13 Javascript
Element Input组件分析小结
2018/10/11 Javascript
微信小程序module.exports模块化操作实例浅析
2018/12/20 Javascript
swiper4实现移动端导航切换
2020/10/16 Javascript
在vue项目中promise解决回调地狱和并发请求的问题
2020/11/09 Javascript
Vue ​v-model相关知识总结
2021/01/28 Vue.js
[53:23]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
利用python爬取软考试题之ip自动代理
2017/03/28 Python
Python第三方Window模块文件的几种安装方法
2018/11/22 Python
Python filter过滤器原理及实例应用
2020/08/18 Python
乔丹诺(Giordano)酒庄德国官网:找到最好的意大利葡萄酒
2017/12/28 全球购物
澳大利亚香水在线:Price Rite Mart
2017/12/28 全球购物
英国领先的在线高尔夫商店:Gamola Golf
2019/11/16 全球购物
Nike墨西哥官网:Nike MX
2020/08/30 全球购物
高中军训感想300字
2014/03/04 职场文书
学习交流会主持词
2014/04/01 职场文书
走进敬老院活动总结
2014/07/10 职场文书
财会专业大学生求职信
2014/09/26 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书
Vue提供的三种调试方式你知道吗
2022/01/18 Vue.js
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android