• node——读取文件中的路径问题


    前提

    当前的js文件叫_dirnameandfilename.js和hello.txt同在G: ode练习文件夹下

    还有一个_dirnameandfilename.js文件在i:/文件夹,但是i:/里面没有hello.txt文件

     hello.txt文件内容是Hello World

    1.我们先来执行第一段代码

    var fs=require('fs');
    
    
    fs.readFile('./hello.txt','utf8',function(err,data){
        if(err){
            throw err;
        }
        console.log(data);
    })

    (1)我们在G: ode练习执行node命令,

    node  _dirnameandfilename

    这是会成功的输出Hello World

    (2)在G: ode练习执行node命令

    node  I:\_dirnameandfilename

    结果也成功输出Hello World,但是hello.txt并不在I:文件夹下,这可以说明

    (3)我们在G:下执行node命令

    node  I:\_dirnameandfilename

    结果告诉我们hello.txt不在G:文件夹下

    node G:
    ode练习\_dirnameandfilename

    这样运行的结果也是错误的

    由此可以证明

    fs.readFile('./hello.txt','utf8',function(err,data)
    此处的./表示的是node命令执行的路径,而不是相对于正在执行这个js文件来查找hello.txt,在node全局下会发生这样的错误

    2.解决在文件读取中./相对路径的问题,使./可以表示为正在执行的js文件的路径
    在看文档时可以知道__dirname,__firename(这里是两个"_")

    __dirname(表示当前正在执行的js所在的目录),__filename(表示当前正在执行的js的完整路径)

     

    console.log(__dirname);
    console.log(__filename);

    我们可以看到当前正在执行的js所在的目录和当前正在执行的js的完整路径显示了出来,那么我们只需要将./hello改变为绝对路径就可以解决问题了

    var fs=require('fs');
    
     var filename=__dirname+'\'+'hello.txt';//两个\是因为转义
    
     fs.readFile(filename,'utf8',function(err,data){
        if(err){
            throw err;
        }
        console.log(data);
    })

    这个时候,在G:路径下执行node命令去运行G: ode练习路径下的js文件,依然会成功

    3.为什么没有引入__dirname,__filename而就能直接使用?

    我们可以看文档里__dirname介绍

    这段话说__dirname,__filename并不是全局的,事实上相当于是本地的

     当在执行js文件的时候相当于将js文件的代码放在了一个函数里

    function(__dirname,__filename){
        r fs=require('fs');
    
     var filename=__dirname+'\'+'hello.txt';//两个\是因为转义
    
     fs.readFile(filename,'utf8',function(err,data){
        if(err){
            throw err;
        }
        console.log(data);
     }
     )

    4.还有问题,我们在路径拼接时,可能firename是D:/形式,在后面加"//"会导致多一个斜杠

    在苹果电脑上,斜杠是这样的:"/",所以程序在苹果电脑上运行会有问题
    所以我们希望有一个工具可以帮助我们自动拼接,并且处理兼容问题
    node里面提供了一个模块path帮我们处理路径

    //加载path模块
    var path=require('path');
    
    var fs=require('fs');
    
     var filename=path.join(__dirname,'hello.txt');
     fs.readFile(filename,'utf8',function(err,data){
        if(err){
            throw err;
        }
        console.log(data);
    });

    这样就行了

  • 相关阅读:
    《修改代码的艺术》读书笔记
    《软件架构师的12项修炼》阅读笔记2
    《软件架构师的12项修炼》阅读笔记1
    python 包
    《编程珠玑》阅读笔记1
    Darknet和YOLO的区别和关系
    darknet
    yolov3
    软件质量属性
    酷客 机器学习十讲(一)机器学习介绍
  • 原文地址:https://www.cnblogs.com/ellen-mylife/p/10822144.html
Copyright © 2020-2023  润新知