1

使用来自另一个基于 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();
}
4

1 回答 1

3

您可以使用__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 程序等上一级访问。另外,由于path.join您不必考虑不同操作系统(如/Unix/Linux 和\Windows)上的路径分隔符。

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

更新

看来您正在使用 J2V8。GitHub 上有一个与您正在尝试执行的操作相关的未解决问题: 问题 #185:设置工作目录

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

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

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

当您可以调用start.jsas时./start.js'.'in Node 应该是start.js文件所在的目录。

于 2016-08-29T15:31:29.657 回答