在Nodejs中从绝对路径获取文件名?

如何从Nodejs中的绝对路径获取文件名?

例如:"foo.txt" from "/var/www/foo.txt"

我知道它适用于字符串操作,比如fullpath.replace(/.+\//, ''), 但我想知道是否有显式的方法,如Java中的file.getName() ?< / p >

288068 次浏览

使用path模块的basename方法:

path.basename('/foo/bar/baz/asdf/quux.html')
// returns
'quux.html'

在这里是上面例子的文档。

如果你已经知道路径分隔符是/(即你正在为特定的平台/环境编写),就像你问题中的例子所暗示的那样,你可以保持简单,用分隔符分割字符串:

'/foo/bar/baz/asdf/quux.html'.split('/').pop()

这将是(并且在我看来更干净),而不是用正则表达式替换。

再次强调:只有在为特定环境编写时才这样做,否则使用path模块,因为路径非常复杂。例如,Windows在许多情况下支持/,但在例如用于共享网络文件夹的\\?\?样式前缀等情况下支持。在Windows上,上述方法迟早会失败。

要获取文件名的文件名部分,使用basename方法:

var path = require("path");
var fileName = "C:\\Python27\\ArcGIS10.2\\python.exe";
var file = path.basename(fileName);


console.log(file); // 'python.exe'

如果你想要不带扩展名的文件名,你可以将扩展名变量(包含扩展名)传递给basename方法,告诉Node只返回不带扩展名的文件名:

var path = require("path");
var fileName = "C:\\Python27\\ArcGIS10.2\\python.exe";
var extension = path.extname(fileName);
var file = path.basename(fileName,extension);


console.log(file); // 'python'
对于那些有兴趣从文件名中删除扩展名的人,您可以使用 https://nodejs.org/api/path.html#path_path_basename_path_ext < / p >
path.basename('/foo/bar/baz/asdf/quux.html', '.html');
var path = require("path");


var filepath = "C:\\Python27\\ArcGIS10.2\\python.exe";


var name = path.parse(filepath).name;
console.log(name); //python


var base = path.parse(filepath).base;
console.log(base); //python.exe


var ext = path.parse(filepath).ext;
console.log(ext); //.exe
在NodeJS中,__filename.split(/\|//).pop()只返回任何OS平台上绝对文件路径中的文件名。 为什么需要关心记住/导入API,而这种正则表达式方法也可以让我们回忆我们的正则表达式技能
所以Nodejs提供了一个默认的全局变量'__fileName',它保存了当前正在执行的文件 我的建议是将__fileName从任何文件传递给服务,以便fileName的检索是动态的

下面,我使用fileName字符串,然后根据path.sep对其进行拆分。注意路径。Sep避免posix文件分隔符和Windows文件分隔符的问题('/'和'\'的问题)。它干净多了。获取子字符串并只获得最后一个分离的名称,然后将其与实际长度减去3就说明了这一点。

你可以这样写一个服务(注意这是在typescript中,但你也可以很好地用js来写)

export class AppLoggingConstants {


constructor(){


}
// Here make sure the fileName param is actually '__fileName'
getDefaultMedata(fileName: string, methodName: string) {
const appName = APP_NAME;
const actualFileName = fileName.substring(fileName.lastIndexOf(path.sep)+1, fileName.length - 3);
//const actualFileName = fileName;
return appName+ ' -- '+actualFileName;
}




}


export const AppLoggingConstantsInstance = new AppLoggingConstants();

path是一个nodeJS module,这意味着你不需要安装任何包来使用它的属性。

import path from 'path'
const dir_name = path.basename('/Users/Project_naptha/demo_path.js')
console.log(dir_name)


// returns
demo_path.js

Var path = require('path');

var filename = path.basename('/Users/Refsnes/demo_path.js'); console.log(文件名);< / p >