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

时间:2013-11-06 11:57:30

标签: node.js path fs

如果有任何API可以从绝对文件路径中检索文件名吗?

e.g。来自"foo.txt"

"/var/www/foo.txt"

我知道它适用于字符串操作,例如fullpath.replace(/.+\//, '') 但我想知道是否有一种更“正式”的方式,比如java中的file.getName(),可以做到。

NodeJS从绝对路径获取文件名吗?

7 个答案:

答案 0 :(得分:418)

使用basename模块的path方法:

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

Here是以上示例的文档。

答案 1 :(得分:15)

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

答案 2 :(得分:2)

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

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

那将是faster(和更清洁的imo),而不是用正则表达式替换。

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

答案 3 :(得分:1)

对于那些有兴趣从文件名中删除扩展名的人,可以使用 https://nodejs.org/api/path.html#path_path_basename_path_ext

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

答案 4 :(得分:0)

var path = require("path");
var filepath = "C:\\Python27\\ArcGIS10.2\\python.exe";
var name = path.parse(filepath).name;

为您提供不带扩展名的文件名(如果您使用扩展名)

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

答案 5 :(得分:0)

因此,Nodejs附带了名为'__fileName'的默认全局变量,该全局变量包含正在执行的当前文件。 我的建议是将__fileName从任何文件传递给服务,以使fileName的检索成为动态

下面,我使用fileName字符串,然后根据path.sep对其进行拆分。注意path.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();

答案 6 :(得分:-1)

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