Node.js path 模块

Java FileNode.js 内置模块


Node.js 的 path 模块是一个内置的核心模块,专门用于处理文件和目录路径。

path 提供了一系列实用方法,可以让你在不同操作系统环境下安全、高效地操作文件路径。

为什么需要 path 模块

不同操作系统使用不同的路径分隔符:

  • Windows 使用反斜杠 \
  • Unix/Linux/macOS 使用正斜杠 /

path 模块会自动处理这些差异,让你的代码在不同平台上都能正常工作。


path 模块的基本用法

引入 path 模块

const path = require('path');

常用方法

1. path.join([...paths]) - 连接路径

实例

const fullPath = path.join('/user', 'documents', 'file.txt');
console.log(fullPath);
// 在 Unix 上输出: /user/documents/file.txt
// 在 Windows 上输出: \user\documents\file.txt

2. path.resolve([...paths]) - 解析绝对路径

实例

const absolutePath = path.resolve('src', 'app.js');
console.log(absolutePath);
// 输出当前工作目录下的绝对路径,如: /home/user/project/src/app.js

3. path.basename(path[, ext]) - 获取文件名

实例

console.log(path.basename('/user/docs/file.txt')); // file.txt
console.log(path.basename('/user/docs/file.txt', '.txt')); // file

4. path.dirname(path) - 获取目录名

实例

console.log(path.dirname('/user/docs/file.txt')); // /user/docs

5. path.extname(path) - 获取扩展名

实例

console.log(path.extname('index.html')); // .html
console.log(path.extname('file')); // 空字符串

跨平台路径处理

路径分隔符

  • path.sep - 平台特定的路径分隔符

    console.log(path.sep); // Windows 输出 '\', Unix 输出 '/'
  • path.delimiter - 平台特定的路径分隔符(用于 PATH 环境变量)

    console.log(path.delimiter); // Windows 输出 ';', Unix 输出 ':'

路径规范化

使用 path.normalize(path) 可以规范化路径,处理多余的 ... 和分隔符:

实例

console.log(path.normalize('/user//docs/../file.txt')); // /user/file.txt

路径解析与格式转换

path.parse(path) - 解析路径为对象

实例

const pathObj = path.parse('/user/docs/file.txt');
console.log(pathObj);
/*
{
  root: '/',
  dir: '/user/docs',
  base: 'file.txt',
  ext: '.txt',
  name: 'file'
}
*/

path.format(pathObject) - 从对象构建路径

实例

const pathStr = path.format({
  dir: '/user/docs',
  name: 'file',
  ext: '.txt'
});
console.log(pathStr); // /user/docs/file.txt

实际应用示例

示例 1: 构建跨平台的文件路径

实例

const configPath = path.join(__dirname, 'config', 'settings.json');
console.log(configPath);

示例 2: 处理用户上传的文件

实例

function saveUploadedFile(uploadDir, originalName) {
  const ext = path.extname(originalName);
  const baseName = path.basename(originalName, ext);
  const timestamp = Date.now();
  const newFileName = `${baseName}_${timestamp}${ext}`;
 
  return path.join(uploadDir, newFileName);
}

示例 3: 检查文件扩展名

实例

function isImageFile(filename) {
  const ext = path.extname(filename).toLowerCase();
  return ['.jpg', '.jpeg', '.png', '.gif'].includes(ext);
}

方法与属性

path 模块的方法与属性如下表:

方法描述示例
path.basename(path[, ext])返回路径中的最后一部分(文件名)。可选参数 ext 用于去除文件扩展名。path.basename('/foo/bar/baz.txt'); // 输出: 'baz.txt'
path.dirname(path)返回路径中的目录部分。path.dirname('/foo/bar/baz.txt'); // 输出: '/foo/bar'
path.extname(path)返回路径中文件的扩展名。path.extname('/foo/bar/baz.txt'); // 输出: '.txt'
path.join([...paths])将多个路径拼接为一个路径,自动处理路径分隔符。path.join('/foo', 'bar', 'baz/asdf', 'quux', '..'); // 输出: '/foo/bar/baz/asdf'
path.resolve([...paths])将路径序列解析为绝对路径,从右到左依次处理每个路径片段,直到构建出一个绝对路径为止。path.resolve('/foo/bar', './baz'); // 输出: '/foo/bar/baz'
path.normalize(path)规范化路径,删除冗余的 ...,并根据当前操作系统替换路径分隔符。path.normalize('/foo/bar//baz/asdf/quux/..'); // 输出: '/foo/bar/baz/asdf'
path.isAbsolute(path)检查路径是否为绝对路径。path.isAbsolute('/foo/bar'); // 输出: true
path.relative(from, to)返回从 from 路径到 to 路径的相对路径。path.relative('/foo/bar/baz', '/foo/bar/qux'); // 输出: '../qux'
path.parse(path)将路径字符串解析为对象,包含 rootdirbaseextname 属性。path.parse('/home/user/dir/file.txt'); 输出:{ root: '/', dir: '/home/user/dir', base: 'file.txt', ...}
path.format(pathObject)将路径对象格式化为路径字符串,与 path.parse 相反。path.format({ root: '/', dir: '/home/user/dir', base: 'file.txt' }); // 输出: '/home/user/dir/file.txt'
path.sep提供当前操作系统的路径分隔符(POSIX 为 '/',Windows 为 '\')。console.log(path.sep); // 输出: '\' (Windows) 或 '/' (POSIX)
path.delimiter提供路径分隔符(环境变量中路径的分隔符),POSIX 为 :,Windows 为 ;console.log(path.delimiter); // 输出: ';' (Windows) 或 ':' (POSIX)

实例

创建 main.js 文件,代码如下所示:

实例

const path = require('path');

// 获取文件名
console.log('文件名:', path.basename('/foo/bar/baz.txt')); // 输出: 'baz.txt'

// 获取目录名
console.log('目录名:', path.dirname('/foo/bar/baz.txt')); // 输出: '/foo/bar'

// 获取扩展名
console.log('扩展名:', path.extname('/foo/bar/baz.txt')); // 输出: '.txt'

// 拼接路径
console.log('拼接路径:', path.join('/foo', 'bar', 'baz/asdf', 'quux', '..')); // 输出: '/foo/bar/baz/asdf'

// 解析绝对路径
console.log('绝对路径:', path.resolve('/foo/bar', './baz')); // 输出: '/foo/bar/baz'

// 规范化路径
console.log('规范化路径:', path.normalize('/foo/bar//baz/asdf/quux/..')); // 输出: '/foo/bar/baz/asdf'

// 判断是否为绝对路径
console.log('是否为绝对路径:', path.isAbsolute('/foo/bar')); // 输出: true

// 相对路径
console.log('相对路径:', path.relative('/foo/bar/baz', '/foo/bar/qux')); // 输出: '../qux'

// 解析路径为对象
const parsedPath = path.parse('/home/user/dir/file.txt');
console.log('解析路径为对象:', parsedPath);
// 输出: { root: '/', dir: '/home/user/dir', base: 'file.txt', ext: '.txt', name: 'file' }

// 将对象格式化为路径
const formattedPath = path.format(parsedPath);
console.log('格式化路径:', formattedPath); // 输出: '/home/user/dir/file.txt'

Java FileNode.js 内置模块