使用来自其他基于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();
}
答案 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
应该是'.'
文件所在的目录。