前提

当前的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. SQL SEVER (ROLLUP与CUBE,ROW_NUMBER())使用方法

    1.建立测试专用数据: if object_id('TESTDB') is not null drop table TESTDB ), B INT) insert into TESTDB union ...

  2. [CodeForces]986A Fair

    大意:给一张图,每个图上有一个数,问以每个点为源点,经过的点包含k种数字的最小距离. 显然跑最短路会T,但我们注意到边权一定.某次学校考试就是类似题,可以bfs做,复杂度O(n),每种货物做一次,复杂 ...

  3. bitset骚操作

    bitset的用途挺多的,是一个比较骚的常数优化 一.很多位数的二进制数 poj 2443 http://poj.org/problem?id=2443 直接开个1万位的二进制数,求交就行了. 有关集 ...

  4. 【hdu 4135】Co-prime

    [题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=4135 [题意] 让你求出[a..b]这个区间内和N互质的数的个数; [题解] 利用前缀和,求出[1 ...

  5. ssm整合shiro—实现认证和授权

    1.简述 1.1    Apache Shiro是Java的一个安全框架.是一个相对简单的框架,主要功能有认证.授权.加密.会话管理.与Web集成.缓存等. 1.2   Shiro不会去维护用户.维护 ...

  6. HttpClient异步请求Post传递Json

    HttpClient异步Post请求,HttpClient.PostAsync(String, HttpContent, CancellationToken),String为Post的Url,Http ...

  7. 推荐几款VisualStudio的插件

    继前几天推荐了一款转换vs插件的插件后,借着安装VS2013之际,把我比较喜欢的几个插件继续推荐一下. C# Outline 2013 2013 C#的代码折叠最小只能到函数级,不像C++那样可以折叠 ...

  8. 上机题目(中级)- 两个超级大的整数相加相减 (Java)

    代码例如以下: public class AddSub { public static void main(String[] args) { String a="46328648326846 ...

  9. Mediator Design Pattern 中介者模式

    就是设计一个Mediator类,能够处理其它类的关系. Mediator类: 1 拥有其它全部类的实例对象 2 设置一个接口供其它类使用,其它类也拥有一个Mediator类成员,仅仅需调用这个Medi ...

  10. UNIX环境高级编程(5):文件I/O(1)

    UNIX系统中的大多数文件I/O仅仅须要用到5个函数:open.read.write.lseek以及close.本章说明的函数常常称为"不带缓冲的I/0",术语不带缓冲指的是每一个 ...