前提

当前的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. POJ 2377 Bad Cowtractors( 最小生成树转化 )

    链接:传送门 题意:给 n 个点 , m 个关系,求这些关系的最大生成树,如果无法形成树,则输出 -1 思路:输入时将边权转化为负值就可以将此问题转化为最小生成树的问题了 /************* ...

  2. HDU 4704 Sum( 费马小定理 + 快速幂 )

    链接:传送门 题意:求 N 的拆分数 思路: 吐嘈:求一个数 N 的拆分方案数,但是这个拆分方案十分 cd ,例如:4 = 4 , 4 = 1 + 3 , 4 = 3 + 1 , 4 = 2 + 2 ...

  3. 会话cookie和持久化cookie实现session

    当你第一次访问一个网站的时候,网站服务器会在响应头内加上Set- Cookie:PHPSESSID=nj1tvkclp3jh83olcn3191sjq3(php服务器),或Set-Cookie JSE ...

  4. nginx启动、关闭与重启命令

    nginx启动 1.启动nginx:./nginx  2.关闭nginx:./nginx  -s  stop 3.重启nginx:./nginx -s reload

  5. 在使用SSH+JPA开发中,ajax使用ObjectMapper类从后台向前台传值

    使用ObjectMapper对象的writeValue方法 ObjectMapper objectMapper = new ObjectMapper(); objectMapper.writeValu ...

  6. C# try-catch-return

    正常执行try后才能执行finally,catch中的语句可能会影响finally的执行 使用 finally 块,可以清理在 Try 中分配的任何资源,而且,即使在 try 块中发生异常,您也可以运 ...

  7. BA-DDC与PLC的比较(转载)

    1.概念 DDC(Direct Digital Control ) ,根据字面的意思为直接的数据控制,它包含了对采集数据的数字化以及对数据的数字处理.DDC的产生式随着楼宇控制.能源管理的需求,以及为 ...

  8. [Spring实战系列](17)编写切点与声明切面

    切点用于准确定位应该在什么地方应用切面的通知. 切点和通知是切面的最基本元素. 在Spring AOP中,须要使用AspectJ的切点表达式语言来定义切点. 关于Spring AOP的AspectJ切 ...

  9. 2016.03.04,英语,《Vocabulary Builder》Unit 04

    vor: 来自拉丁动词vorare,指to eat,-ivorous指吃某种食物的eater.carn肉,肉欲+vore吃→吃肉的:carnival狂欢节,谢肉节voracious a 狼吞虎咽的(v ...

  10. 【POJ 2828】Buy Tickets

    [题目链接] http://poj.org/problem?id=2828 [算法] 离线用线段树维护序列即可 [代码] #include <algorithm> #include < ...