zoukankan      html  css  js  c++  java
  • 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);
    });

    这样就行了

  • 相关阅读:
    jumperserver3.0的安装部署
    zookeeper3.4.6配置实现自动清理日志
    因为修改linux selinux修改错误产生的问题及解决办法
    修改linux系统编码
    linux如何连接移动硬盘
    调整linux系统时区
    关于公司夫妻档的事情
    hive将数据导致本地磁盘
    shell如何向python传递参数,shell如何接受python的返回值
    关于日志API接口中流量的使用。
  • 原文地址:https://www.cnblogs.com/ellen-mylife/p/10822144.html
Copyright © 2011-2022 走看看