前提

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

还有一个_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:\node练习执行node命令,

node  _dirnameandfilename

这是会成功的输出Hello World

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

node  I:\_dirnameandfilename

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

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

node  I:\_dirnameandfilename

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

node G:\node练习\_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:\node练习路径下的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);
});

这样就行了

node——读取文件中的路径问题的更多相关文章

  1. JAVA文件中获取路径及WEB应用程序获取路径方法

    JAVA文件中获取路径及WEB应用程序获取路径方法 1. 基本概念的理解 `绝对路径`:你应用上的文件或目录在硬盘上真正的路径,如:URL.物理路径 例如: c:/xyz/test.txt代表了tes ...

  2. 读取文件之<绝对路径>与<相对路径>

    前言:字符流.字节流读取文件,下面的代码是在网上找到的一个各种文件读取方式,还算比较详细,分享给大家. public class ReadFromFile { /** * 以字节为单位读取文件,常用于 ...

  3. shell awk读取文件中的指定行的指定字段

    1.awk功能和实用形式 awk指定读取文件中的某一行的某个字段 awk      可以设置条件来输出文件中m行到n行中每行的指定的k字段,使用格式如下 awk    'NR==m,NR==n {pr ...

  4. IO流的练习5 —— 读取文件中的字符串,排序后写入另一文件中

    需求:已知s.txt文件中有这样的一个字符串:“hcexfgijkamdnoqrzstuvwybpl” 请编写程序读取数据内容,把数据排序后写入ss.txt中. 分析: A:读取文件中的数据 B:把数 ...

  5. Python 读取文件中unicode编码转成中文显示问题

    Python读取文件中的字符串已经是unicode编码,如:\u53eb\u6211,需要转换成中文时有两种方式 1.使用eval: eval("u"+"\'" ...

  6. json数据处理:读取文件中的json字符串,转为python字典

    方法1: 读取文件中的json字符串, 再用json.loads转为python字典 import json str_file = './960x540/config.json' with open( ...

  7. 利用PushbackReader读取文件中某个字符串之前的内容

    package File; import java.io.FileReader; import java.io.IOException; import java.io.PushbackReader; ...

  8. vue单文件中引用路径的处理

    原文地址:vue单文件中引用路径的处理如有错误,欢迎指正! vue单文件的开发过程中,在单文件模版中可能会涉及到文件路径的处理,比如 <img>, style 中的 background ...

  9. python读取文件使用相对路径的方法

    场景描述: python传统的读取文件的方法,通过读取文件所在目录来读取文件,这样出现的问题是,如果文件变更了存储路径,那么就会读取失败导致报错 如下方脚本 def stepb(a):#写入txt f ...

随机推荐

  1. 解决vue中模态框内数据和外面的数据绑定的问题

    1.做表格的修改,把整条数据传到模态框做修改,但是出现模态框改变数据没有保存时,表格的数据也会跟着改变,我想实现保存以后表格数据才会改变的功能. html:使用item整条数据都上传过去了,在upda ...

  2. 如何在php中优雅的地调用python程序

    1.准备工作   安装有python和php环境的电脑一台. 2.书写程序. php程序如下 我们也可以将exec('python test.py') 换成 system('python test.p ...

  3. Shader的初步学习

    Shader 着色器 .shader 仅仅是渲染流水线中的一个环节,要想让shader发挥出它的作用,我们就需要知道它在渲染流水线中扮演什么样的角色. 渲染流水线的工作任务在于由一个三维场景出发.生成 ...

  4. Ubuntu 终端配置

    安装zsh apt install zsh 设置zsh为默认shell chsh -s /bin/zsh 恢复 bash 使用 chsh -s /bin/bash 安装 Oh My Zsh sh -c ...

  5. WEBGL学习【三】颜色选择

    <html lang="zh-CN"> <head> <title>NeHe's WebGL</title> <meta ch ...

  6. 在 vue-test-utils 中 mock 全局对象

    vue-test-utils 提供了一种 mock 掉 Vue.prototype 的简单方式,不但对测试用例适用,也可以为所有测试设置默认的 mock. mocks 加载选项 mocks 加载选项 ...

  7. 公司组织oracle培训的理解

    oracle执行机制 1.客户端发送一条sql给oracle服务器,oracle会看这条sql的执行计划是否存在缓存  如果存在则直接运行,如果不存在执行第二步. 2.如果不存在缓存 则会 进行语法检 ...

  8. PuTTY介绍、安装、使用

    简介 PuTTY是一个Telnet.SSH.rlogin.纯TCP以及串行接口连接软件.较早的版本仅支持Windows平台,在最近的版本中开始支持各类Unix平台,并打算移植至Mac OS X上.除了 ...

  9. wifi共享精灵2014.04.25.001已经更新,wifi热点中文名走起!

    五一回来后,有个惊喜,wifi共享精灵有了最新动向.不晓得wifi共享精灵是啥的朋友,我来解释下,它就相当于一个无线路由器.说起来,Wifi共享精灵正式版2014.04.25.001(http://w ...

  10. uva 10003 Cutting Sticks 【区间dp】

    题目:uva 10003 Cutting Sticks 题意:给出一根长度 l 的木棍,要截断从某些点,然后截断的花费是当前木棍的长度,求总的最小花费? 分析:典型的区间dp,事实上和石子归并是一样的 ...