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

如。“/var/www/foo.txt”中的foo.txt

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


当前回答

要获取文件名的文件名部分,使用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'

其他回答

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

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

// returns
demo_path.js

使用path模块的basename方法:

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

下面是上面例子的文档。

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

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

这将比用正则表达式替换更快(并且更干净)。

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

在NodeJS中,__filename.split(/\|//).pop()只返回任何OS平台上绝对文件路径中的文件名。 为什么要关心记住/导入API,而这种正则表达式方法也让我们回忆起我们的正则表达式技能。

要获取文件名的文件名部分,使用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'