是否从Nodejs中的绝对路径获取文件名?

piwo6bdm  于 2022-12-12  发布在  Node.js
关注(0)|答案(9)|浏览(182)

如何从Nodejs中的绝对路径获取文件名?
例如从"/var/www/foo.txt"转换为"foo.txt"
我知道它可以使用字符串操作,比如fullpath.replace(/.+\//, ''),但是我想知道有没有一种显式的方法,比如Java中的file.getName()

13z8s7eq

13z8s7eq1#

使用path模块的basename方法:

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

下面是上面示例的来源文档。

6ju8rftf

6ju8rftf2#

若要取得文件名称的文件名称部分,请使用basename方法:

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

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

如果需要不带扩展名的文件名,可以将extension变量(包含扩展名)传递给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'
tuwxkamq

tuwxkamq3#

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
yftpprvb

yftpprvb4#

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

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

gz5pxeao5#

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

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

这将是faster(和干净的imo)比替换正则表达式。
再次强调:只有在你为特定环境编写的时候才这样做,否则就使用path模块,因为路径非常复杂。例如,Windows在很多情况下支持/,但是not支持\\?\?风格的前缀,用于共享网络文件夹等。在Windows上,上述方法注定要失败,迟早。

wh6knrhe

wh6knrhe6#

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
wfsdck30

wfsdck307#

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

zrfyljdw

zrfyljdw8#

因此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();
zbsbpyhn

zbsbpyhn9#

变量路径=需要('路径');
如果您的计算机上有一个文件名,那么您就可以使用这个文件名来创建一个文件。console.log(文件名);

相关问题