使用来自另一个基于 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/