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

当前的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——读取文件中的路径问题的更多相关文章
- JAVA文件中获取路径及WEB应用程序获取路径方法
JAVA文件中获取路径及WEB应用程序获取路径方法 1. 基本概念的理解 `绝对路径`:你应用上的文件或目录在硬盘上真正的路径,如:URL.物理路径 例如: c:/xyz/test.txt代表了tes ...
- 读取文件之<绝对路径>与<相对路径>
前言:字符流.字节流读取文件,下面的代码是在网上找到的一个各种文件读取方式,还算比较详细,分享给大家. public class ReadFromFile { /** * 以字节为单位读取文件,常用于 ...
- shell awk读取文件中的指定行的指定字段
1.awk功能和实用形式 awk指定读取文件中的某一行的某个字段 awk 可以设置条件来输出文件中m行到n行中每行的指定的k字段,使用格式如下 awk 'NR==m,NR==n {pr ...
- IO流的练习5 —— 读取文件中的字符串,排序后写入另一文件中
需求:已知s.txt文件中有这样的一个字符串:“hcexfgijkamdnoqrzstuvwybpl” 请编写程序读取数据内容,把数据排序后写入ss.txt中. 分析: A:读取文件中的数据 B:把数 ...
- Python 读取文件中unicode编码转成中文显示问题
Python读取文件中的字符串已经是unicode编码,如:\u53eb\u6211,需要转换成中文时有两种方式 1.使用eval: eval("u"+"\'" ...
- json数据处理:读取文件中的json字符串,转为python字典
方法1: 读取文件中的json字符串, 再用json.loads转为python字典 import json str_file = './960x540/config.json' with open( ...
- 利用PushbackReader读取文件中某个字符串之前的内容
package File; import java.io.FileReader; import java.io.IOException; import java.io.PushbackReader; ...
- vue单文件中引用路径的处理
原文地址:vue单文件中引用路径的处理如有错误,欢迎指正! vue单文件的开发过程中,在单文件模版中可能会涉及到文件路径的处理,比如 <img>, style 中的 background ...
- python读取文件使用相对路径的方法
场景描述: python传统的读取文件的方法,通过读取文件所在目录来读取文件,这样出现的问题是,如果文件变更了存储路径,那么就会读取失败导致报错 如下方脚本 def stepb(a):#写入txt f ...
随机推荐
- BZOJ 1221 [HNOI2001] 软件开发 费用流_建模
题目描述: 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员每天提供 ...
- 日常记录-Pandas Cookbook
Cookbook 1.更新内容 2.关于安装 3.Pandas使用注意事项 4.包环境 5.10分钟Pandas初识 6.教程 7.Cookbook 8.数据结构简介 9.基本功能 10.使用文本数据 ...
- Django:URL,Views,Template,Models
准备工作:熟悉Django命令行工具 django-admin.py 是Django的一个用于管理任务的命令行工具,常用的命令整理如下: <1> 创建一个django工程 : django ...
- express get和post方法
把之前学习的一个小例子贴出来: 前提:需安装nodejs,可以在终端中输入node -v检查是否安装成功,安装成功后才可执行下面的步骤. 1.新建一个名称为“node”文件夹 2.进入node目录 ...
- js 操作table: insertRow(),deleteRow(),insertCell(),deleteCell()方法
表格有几行: var trCnt = table.rows.length; (table为Id ) 每行有几列:for (var i=0; i<trCnt; i++) ...
- 完整的html+css+javascript实现跟随鼠标移动显示选中效果
1,显示效果: 2,html结构 <div class="process_list-lpu"> <div class="process_line&quo ...
- 在IntelliJ IDEA中创建Web项目
在IntelliJ IDEA中创建Web项目 在IntelliJ IDEA中创建Web项目1,创建Maven WebProject选择File>New>Project 出现New Proj ...
- 路由器一键桥接Android实现
開始之前,首先说一下什么叫一键桥接,所谓一键桥接,就是点击一下.就能够对所连接的路由器进行网络中继设置.以实现路由器能够通过已有的无线路由器进行网络訪问. 那么实现这个功能有几种方法呢?能够说有非常多 ...
- codeforces 571A--Lengthening Sticks(组合+容斥)
A. Lengthening Sticks time limit per test 1 second memory limit per test 256 megabytes input standar ...
- pthread_create()创建线程时传入多个參数
因为接口仅仅定义了一个入參void *arg int pthread_create(pthread_t *tidp,const pthread_attr_t *attr, (void*)(*start ...