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进阶:基于express+multer的文件上传实例
Nov 21 NodeJs
Nodejs进阶:核心模块net入门学习与实例讲解
Nov 21 NodeJs
利用nodejs监控文件变化并使用sftp上传到服务器
Feb 18 NodeJs
nodejs使用express创建一个简单web应用
Mar 31 NodeJs
详解nodeJS之路径PATH模块
May 31 NodeJs
nodejs+express搭建多人聊天室步骤
Feb 12 NodeJs
修改Nodejs内置的npm默认配置路径方法
May 13 NodeJs
nodejs读取本地中文json文件出现乱码解决方法
Oct 10 NodeJs
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
Feb 06 NodeJs
浅谈使用nodejs搭建web服务器的过程
Jul 20 NodeJs
nodejs中内置模块fs,path常见的用法说明
Nov 07 NodeJs
NodeJS模块Buffer原理及使用方法解析
Nov 11 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下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
Tips 带三角可关闭的文字提示
2010/10/06 Javascript
jquery动态添加删除div 具体实现
2013/07/20 Javascript
js数组循环遍历数组内所有元素的方法
2014/01/18 Javascript
脚本合并提升javascript性能示例
2014/02/24 Javascript
一个jquery实现的不错的多行文字图片滚动效果
2014/09/28 Javascript
jQuery中removeData()方法用法实例
2014/12/27 Javascript
jQuery实现表格颜色交替显示的方法
2015/03/09 Javascript
JS+CSS实现简易的滑动门效果代码
2015/09/24 Javascript
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
Vue.js每天必学之组件与组件间的通信
2016/09/08 Javascript
js微信支付实现代码
2016/12/22 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
使用vux实现上拉刷新功能遇到的坑
2018/02/08 Javascript
ES6入门教程之Array.from()方法
2019/03/23 Javascript
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
Python对小数进行除法运算的正确方法示例
2014/08/25 Python
Linux RedHat下安装Python2.7开发环境
2017/05/20 Python
关于Python 的简单栅格图像边界提取方法
2019/07/05 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
python实现ftp文件传输功能
2020/03/20 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
美国存储和组织商店:The Container Store
2017/08/16 全球购物
一套Java笔试题
2016/08/20 面试题
将一个文本文件的内容按倒序打印出来
2015/01/05 面试题
行政监察建议书
2014/05/19 职场文书
医药销售自我评价200字
2014/09/11 职场文书
教育实践活动对照检查材料
2014/09/23 职场文书
师德师风自查材料
2014/10/14 职场文书
四风问题专项整治工作情况报告
2014/10/28 职场文书
2015年手术室工作总结
2015/05/11 职场文书
2015年检察院个人工作总结
2015/05/20 职场文书
Python torch.flatten()函数案例详解
2021/08/30 Python
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers