从另一个基于Node.js的应用程序(2)使用J2V8在JVM上运行JVM应用程序(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();
}发布于 2016-08-29 23:31:30
可以使用__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'));另外,由于有了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调用时,Node中的'.'应该是start.js文件所在的目录。
https://stackoverflow.com/questions/39209824
复制相似问题