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 ...
随机推荐
- 解决value toDF is not a member of org.apache.spark.rdd.RDD (spark2.1 )
解决上述办法有两点: 1.两个import 需要放在 hiveCtx之后. val hiveCtx: SparkSession = SparkSession.builder.config(conf). ...
- Python笔记22-----高阶函数
1.sorted(排序对象,key=):排序对象可以是类别,也可以是字符串和字典,key为自定义排序,如:[key=abs,按绝对值排序][key=lambda x:x[1],按排序对象的第二个值排序 ...
- 【JavaScript框架封装】实现一个类似于JQuery的动画框架的封装
// 动画框架 (function (xframe) { // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法) xframe.extend({}); // 不需要参与链式访问的 ...
- 汇编-理解call,ret
; 有意思的东西,主函数调用子函数用汇编来理解 assume cs:codeseg codeseg segment start: main: call sub1 ; 调用子函数1, push IP1 ...
- C# List源码分析(二)
常用操作的复杂度分析 Contains 该方法是一个O(n)的方法,是根据顺序依次遍历整个列表的,观看源码,跟JAVA还是有不少分别的,在上一篇中就有发现,因为C#对Primitive类型是有处理的, ...
- Emgu cv人脸检测识别
Emgu cv人脸检测识别 1.开发平台:WIN10 X64 VS2012 Emgucv版本:3.1 2.先给大家分享一个官网给的示例源代码: https://ncu.dl.sourcef ...
- [Beginning SharePoint Designer 2010]Chapter 3 分析SharePoint页面
本章概要: 1.SharePoint中主要页面类型 2.SharePoint如何组织页面 3.如何编辑母板页 4.SharePoint母板页中的主要内容占位符
- Java&Xml教程(十一)JAXB实现XML与Java对象转换
JAXB是Java Architecture for XML Binding的缩写,用于在Java类与XML之间建立映射,可以帮助开发人员非常方便的將XML和Java对象进行相互转换. 本文以一个简单 ...
- [BZOJ 3884][欧拉定理]上帝与集合的正确使用方法
看看我们机房某畸形写的题解:http://blog.csdn.net/sinat_27410769/article/details/46754209 此题为popoQQQ神犇所出,在此orz #inc ...
- cocos2d-x 3.0 经常使用对象的创建方式
cocos2d-x 3.0 中全部对象差点儿都能够用create函数来创建,其它的创建方式也是有create函数衍生. 以下来介绍下create函数创建一般对象的方法,省得开发中常常忘记啥的. 1.精 ...