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中简单实现Javascript Promise机制的实例
Dec 06 NodeJs
轻松创建nodejs服务器(10):处理POST请求
Dec 18 NodeJs
NodeJS学习笔记之MongoDB模块
Jan 13 NodeJs
nodejs中实现阻塞实例
Mar 24 NodeJs
Nodejs中 npm常用命令详解
Jul 04 NodeJs
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
Nov 21 NodeJs
nodejs爬虫遇到的乱码问题汇总
Apr 07 NodeJs
详解如何在NodeJS项目中优雅的使用ES6
Apr 22 NodeJs
nodejs前端自动化构建环境的搭建
Jul 26 NodeJs
nodejs用gulp管理前端文件方法
Jun 24 NodeJs
Nodejs实现用户注册功能
Apr 14 NodeJs
nodeJS与MySQL实现分页数据以及倒序数据
Jun 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
Mysql的常用命令
2006/10/09 PHP
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
php判断数组中是否存在指定键(key)的方法
2015/03/17 PHP
PHP list() 将数组中的值赋给变量的简单实例
2016/06/13 PHP
基于jQuery试卷自动排版系统
2010/07/18 Javascript
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
js中把JSON字符串转换成JSON对象最好的方法
2014/03/21 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
2016/05/10 Javascript
canvas实现手机端用来上传用户头像的代码
2016/10/20 Javascript
JavaScript实现256色转灰度图
2017/02/22 Javascript
JavaScript之面向对象_动力节点Java学院整理
2017/06/29 Javascript
vue2.0 常用的 UI 库实例讲解
2017/12/12 Javascript
微信小程序分享海报生成的实现方法
2018/12/10 Javascript
如何让node运行es6模块文件及其原理详解
2018/12/11 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
python使用append合并两个数组的方法
2015/04/28 Python
简单谈谈python的反射机制
2016/06/28 Python
Python 备份程序代码实现
2017/03/06 Python
python使用webdriver爬取微信公众号
2018/08/31 Python
对python模块中多个类的用法详解
2019/01/10 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
2019/08/06 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
Python小白不正确的使用类变量实例
2020/05/29 Python
python中PyQuery库用法分享
2021/01/15 Python
纯css3(无图片/js)制作的几个社交媒体网站的图标
2013/03/21 HTML / CSS
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
关于逃课的检讨书
2014/01/23 职场文书
大学生军训自我鉴定
2014/02/12 职场文书
怀念母亲教学反思
2014/04/28 职场文书
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
个人工作失误的保证书怎么写?
2019/06/21 职场文书
JavaScript控制台的更多功能
2021/04/28 Javascript
详解Vue slot插槽
2021/11/20 Vue.js