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开发环境配置与使用
Nov 17 NodeJs
NodeJS学习笔记之MongoDB模块
Jan 13 NodeJs
详解nodejs与javascript中的aes加密
May 22 NodeJs
详解nodejs模板引擎制作
Jun 14 NodeJs
CentOS 安装NodeJS V8.0.0的方法
Jun 15 NodeJs
NodeJS爬虫实例之糗事百科
Dec 14 NodeJs
基于nodejs实现微信支付功能
Dec 20 NodeJs
Nodejs下使用gm圆形裁剪并合成图片的示例
Feb 22 NodeJs
nodejs acl的用户权限管理详解
Mar 14 NodeJs
详解NodeJs开发微信公众号
May 25 NodeJs
M2实现Nodejs项目自动部署的方法步骤
May 05 NodeJs
浅谈使用nodejs搭建web服务器的过程
Jul 20 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 无限级分类 获取顶级分类ID
2016/03/13 PHP
Laravel5.1 框架控制器基础用法实例分析
2020/01/04 PHP
有关PHP 中 config.m4 的探索
2020/08/26 PHP
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
2009/11/26 Javascript
jqPlot 基于jquery的画图插件
2011/04/26 Javascript
JavaScript ECMA-262-3 深入解析.第三章.this
2011/09/28 Javascript
21个JavaScript事件(Events)属性汇总
2014/12/02 Javascript
jQuery插件支持同一页面被多次调用
2016/02/14 Javascript
Javascript随机标签云代码实例
2016/06/21 Javascript
ajax与json 获取数据并在前台使用简单实例
2017/01/19 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
vue单元格多列合并的实现
2020/11/26 Vue.js
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
[02:42]岂曰无衣,与子同袍!DOTA2致敬每一位守护人
2020/02/17 DOTA
python抓取最新博客内容并生成Rss
2015/05/17 Python
django manage.py扩展自定义命令方法
2018/05/27 Python
对pandas中to_dict的用法详解
2018/06/05 Python
浅谈python的输入输出,注释,基本数据类型
2019/04/02 Python
Python使用sklearn实现的各种回归算法示例
2019/07/04 Python
keras中的卷积层&池化层的用法
2020/05/22 Python
python使用opencv resize图像不进行插值的操作
2020/07/05 Python
python缩进长度是否统一
2020/08/02 Python
python根据字典的键来删除元素的方法
2020/08/16 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
皇马官方商城:Real Madrid Store
2016/09/02 全球购物
Nisbets爱尔兰:英国最大的厨房和餐饮设备供应商
2019/01/26 全球购物
毕业生实习鉴定
2013/12/11 职场文书
网络编辑岗位职责范本
2014/02/10 职场文书
中西医专业毕业生职业规划书
2014/02/24 职场文书
主持人开幕词
2015/01/29 职场文书
社区节水倡议书
2015/04/29 职场文书
2016年国培心得体会及反思
2016/01/13 职场文书
浅谈MySQL函数
2021/10/05 MySQL
关于pytest结合csv模块实现csv格式的数据驱动问题
2022/05/30 Python