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

时间:2016-08-29 15:24:44

标签: 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();
}

1 个答案:

答案 0 :(得分:3)

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

例如:

userName

可能会做你需要的。

或使用path.join

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

var path = require('path'); fs.readFileSync(path.join(__dirname, 'lib', 'someFile.json'); 您可以执行以下操作:

path.join

访问距您的Node程序等级一级的console.log(path.join(__dirname, '..', 'lib', 'someFile.json')); 。另外,感谢lib,您不必考虑不同操作系统上的路径分隔符(例如path.join在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应该是'.'文件所在的目录。