如何在Nodejs中从绝对路径获取文件名?
例如:从"/var/www/foo.txt"
获取"foo.txt"
我知道可以使用字符串操作,例如fullpath.replace(/.+\//, '')
,但我想知道是否有像Java中的file.getName()
这样的显式方法?
使用 path
模块的 basename
方法:
path.basename('/foo/bar/baz/asdf/quux.html')
// returns
'quux.html'
这里是上面例子所提取的文档。
要获取文件名的名称部分,可以使用basename方法:
var path = require("path");
var fileName = "C:\\Python27\\ArcGIS10.2\\python.exe";
var file = path.basename(fileName);
console.log(file); // 'python.exe'
如果你想获得没有文件扩展名的文件名,你可以将包含扩展名的变量(即 extension variable)传递给 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.parse(fileName).name
。 - hong4rcvar 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
如果您想删除文件名中的扩展名,可以使用https://nodejs.org/api/path.html#path_path_basename_path_ext
path.basename('/foo/bar/baz/asdf/quux.html', '.html');
/
(即您正在为特定平台/环境编写代码),就像您问题中的示例所暗示的那样,您可以通过分隔符简单地拆分字符串:'/foo/bar/baz/asdf/quux.html'.split('/').pop()
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
const path = require('path');
const absolutePath = '/var/www/foo.txt';
const fileName = path.basename(absolutePath);
console.log(fileName); // Output: foo.txt
path.basename() 函数会自动从给定的路径中提取文件名。Nodejs自带一个名为'__fileName'
的默认全局变量,它保存当前正在执行的文件。我的建议是从任何文件中将__fileName传递给服务,以便动态检索fileName。
下面,我使用fileName字符串,然后根据path.sep
进行拆分。注意,path.sep避免了posix文件分隔符和Windows文件分隔符的问题('/'和'\'的问题)。这样做更加简洁。获取子字符串并仅获取最后一个分隔名称,并将其减去实际长度3,这说明了它本身的作用。
您可以编写此类服务(请注意,此处使用TypeScript,但您完全可以使用JavaScript编写)
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.basename(fpath, path.extname(fpath))
- Waylon Flinn