gpt4 book ai didi

java - 使用 J2V8 从 java 项目嵌入 node.js 应用程序 - 解析 node.js 中的相对路径

转载 作者:行者123 更新时间:2023-11-29 04:40:58 27 4
gpt4 key购买 nike

使用来自另一个基于 Java 的应用程序 (2) 的 J2V8 在 JVM 上运行 Node.js 应用程序 (1) 时遇到问题。应用程序(1)的启动脚本在线失败

fs.readFileSync('./lib/someFile.json') 

因为J2V8提供了'.'路径到应用程序(2)根目录但我需要 '.' 成为应用程序 (1) 根目录的路径。

我如何处理仅在项目 (2) 中进行更改?

更新:添加了启动 node.js 应用程序的 Java 代码。

public static void main(String[] args) {
final NodeJS nodeJS = NodeJS.createNodeJS();
File nodeScript = new File("/media/Projects/Test/start.js");
nodeJS.exec(nodeScript);
while(nodeJS.isRunning()) {
nodeJS.handleMessage();
}
nodeJS.release();
}

最佳答案

您可以使用 __dirname获取 Node 脚本所在目录的路径。

例如:

fs.readFileSync(__dirname + '/lib/someFile.json');

可能会满足您的需求。

或使用 path.join :

var path = require('path');
fs.readFileSync(path.join(__dirname, 'lib', 'someFile.json');

使用 path.join 你可以做如下事情:

console.log(path.join(__dirname, '..', 'lib', 'someFile.json'));

访问 lib,它比你的 Node 程序高一级操作系统(如 Unix/Linux 上的 / 和 Windows 上的 \)。

仅对您的 Java 项目进行更改,您将不得不使用不同的工作目录运行您的 Node 应用程序。这取决于您如何运行它,但您应该做的是在运行 Node 应用程序之前将目录更改为您希望 '.' 指向的目录。您没有提供从您的 Java 应用程序实际运行 Node 应用程序的代码示例,因此很难再多说什么。

更新

看来您使用的是 J2V8。 GitHub 上有一个与您尝试执行的操作相关的未解决问题: Issue #185: Set the working directory .

在从 Java 启动 Node 程序之前,您可以尝试更改工作目录 - 使用任何与 chdir 等效的 Java系统调用。

或者,您可以将您的 Node 程序复制到您的 Java 项目中,以便它们的 '.' 目录相同,这样您就可以调用它:

File nodeScript = new File("./start.js");

当你可以调用 start.js./start.js 时,Node 中的 '.' 应该是start.js文件所在。

关于java - 使用 J2V8 从 java 项目嵌入 node.js 应用程序 - 解析 node.js 中的相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39209824/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com