Node.js 节点从绝对路径获取文件名?

Node.js 节点从绝对路径获取文件名?,node.js,path,fs,Node.js,Path,Fs,是否有任何API可以从绝对文件路径检索文件名 e、 g.“foo.txt”来自“/var/www/foo.txt” 我知道它与字符串操作一起工作,比如fullpath.replace(/。+\/,“”) 但我想知道是否有一种更“正式”的方法,比如java中的file.getName(),可以做到这一点 nodej从绝对路径获取文件名?使用path模块的basename方法: path.basename('/foo/bar/baz/asdf/quux.html') // returns 'quux

是否有任何API可以从绝对文件路径检索文件名

e、 g.
“foo.txt”
来自
“/var/www/foo.txt”

我知道它与字符串操作一起工作,比如
fullpath.replace(/。+\/,“”)
但我想知道是否有一种更“正式”的方法,比如java中的
file.getName()
,可以做到这一点


nodej从绝对路径获取文件名?

使用
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方法,告知节点仅返回不带扩展名的名称:

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'

对于那些想从文件名中删除扩展名的人,可以使用

上面的代码返回不带扩展名的文件名,如果您需要带扩展名的文件名,请使用

var path = require("path");
var filepath = "C:\\Python27\\ArcGIS10.2\\python.exe";
var name = path.basename(filepath);
// returns
'python.exe'

在NodeJS中,\uu filename.split(/\\124;/).pop()只返回任何操作系统平台上绝对文件路径中的文件名。
为什么需要记住/导入一个API,而这种正则表达式方法也让我们回忆起我们的正则表达式技能。

所以Nodejs带有一个默认的全局变量,名为
“\uu fileName”
,它保存当前正在执行的文件 我的建议是将_文件名从任何文件传递给服务,以便文件名的检索是动态的

下面,我使用文件名字符串,然后根据
path.sep
将其拆分。注意path.sep避免了posix文件分隔符和windows文件分隔符的问题(与“/”和“\”有关的问题)。它干净多了。得到子字符串,只得到最后一个分开的名称,然后用实际长度减去3,这本身就说明了问题

您可以编写这样的服务(请注意,这是用typescript编写的,但您可以很好地用js编写)


如果还想删除扩展名:
path.basename(fpath,path.extname(fpath))
Windows have\as文件夹separator@OwnageIsMagic是的,这就是为什么我写“如果您已经知道路径分隔符是/”…)不清楚你这句话是什么意思。这将生成依赖于平台的代码,这些代码将在其他服务器上以静默方式失败platforms@OwnageIsMagic是的,的确如此。如果不是为特定平台编写,请始终使用路径模块的方法。windows实际上接受/和\作为文件夹分隔符,您甚至可以将其混合使用。请详细说明您的答案。如果您希望文件名不带扩展名,我建议使用:
path.parse(fileName).name
var path = require("path");
var filepath = "C:\\Python27\\ArcGIS10.2\\python.exe";
var name = path.parse(filepath).name;
// returns
'python'
var path = require("path");
var filepath = "C:\\Python27\\ArcGIS10.2\\python.exe";
var name = path.basename(filepath);
// returns
'python.exe'
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();