• 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();
  • 相关阅读:
    javaWeb下载
    javaWeb上传
    JavaWeb过滤器
    JavaWeb中的监听器
    数据库dbutils
    数据库连接池
    51nod 1837 砝码称重【数学,规律】
    Codeforces Round #437 (Div. 2)[A、B、C、E]
    Codeforces Round #436 (Div. 2)【A、B、C、D、E】
    Codeforces Round #435 (Div. 2)【A、B、C、D】
  • 原文地址:https://www.cnblogs.com/hutuzhu/p/4484331.html
Copyright © 2020-2023  润新知