zoukankan      html  css  js  c++  java
  • Nodejs学习笔记之复制文件

    前端童鞋都知道,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结果如下:

    注意事项:

    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();
  • 相关阅读:
    手机号码正则表达式
    POJ 3233 Matrix Power Series 矩阵快速幂
    UVA 11468
    UVA 1449
    HDU 2896 病毒侵袭 AC自动机
    HDU 3065 病毒侵袭持续中 AC自动机
    HDU 2222 Keywords Search AC自动机
    POJ 3461 Oulipo KMP模板题
    POJ 1226 Substrings KMP
    UVA 1455 Kingdom 线段树+并查集
  • 原文地址:https://www.cnblogs.com/hutuzhu/p/4484331.html
Copyright © 2011-2022 走看看