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

标签 java node.js j2v8

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

相关文章:

java - 使用 spring 3 以用户可以更改的频率运行作业/异步任务

angularjs - 如何在 Angular JS 中使用 $http GET 方法发送数据?

java - 如何使用 J2V8 在 Android 中使用 NodeJS

android - J2V8 for Android,上下文方法

node.js - Browserify 的自定义依赖名不起作用

java - 类范围变量与方法范围变量

java - 调用方法时 "this"在 Java 中如何工作?

java - 从日历对象显示“MM/DD/YYYY”(重复)

javascript - 动态添加属性到 Node 模块