我对从MATLAB执行的JAVA应用程序感到不满意。简而言之,我有以下代码:
try {
dir = new File("Patients/Patient" + patientNumber + "/Meals");
dir.mkdirs();
.... more code goes here
} catch (Exception e) {
System.out.println("Some Error");
出于某种原因,我不知道为什么,这个代码在从JAVA main方法执行时运行得很好。 但是,从MATLAB这段代码不起作用。它终止于dir.mkdirs()
,因此永远不会创建目录。之前我曾多次使用mkdirs()
和mkdir()
成功,因此,我怀疑MATLAB中存在问题。你知道是什么原因吗?
堆栈追踪:
e.printStackTrace();
返回以下内容:
java.io.FileNotFoundException: Patients\Patient1\Meals\meal0.csv (The system cannot find the path specified.)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileWriter.<init>(Unknown Source)
at inputOutput.PrintPatientCsv.printMealCsv(PrintPatientCsv.java:57)
at inputOutput.CreatePopulation.createpopulation(CreatePopulation.java:54)
at functionality.FactoryModel.loadData(FactoryModel.java:100)
最后三行是未创建目录的产品。但是,我不确定上面代码中前4行的含义。
计划详情
我的Java程序是在.jar
文件中创建的。此.jar
文件位于:
C:\ Users \用户MYNAME \程序\ binJava
我的matlab(我在其中执行.jar
文件)文件位于:
C:\ Users \用户MYNAME \程序\ MATLAB
在我的MATLAB中输入以下内容:
clear all
javaaddpath('..\binJava\myFile.jar')
import functionality.*;
import domain.*;
import test.*;
import inputOutput.*;
function.MyFunction(1,2,3);
导入语句的原因是我的程序被构建为4个不同的包。
* 更新:* 我刚刚发现如果我创建lnunno sugested的绝对目录,该程序是有效的。但这仍然无法解决问题。
答案 0 :(得分:0)
我没有要求发表评论的代表,但您是否尝试过使用绝对路径?
java.io.FileNotFoundException: Patients\Patient1\Meals\meal0.csv (The system cannot find the path specified.)
表示java无法找到您使用相对路径指定的文件。我不确定当你从Matlab调用它时它会如何变化,但也许你可以用绝对路径指定这个目录所在的位置并测试它并用堆栈跟踪报告。
答案 1 :(得分:0)
它承载的MATLAB和Java虚拟机(JVM)是在同一进程下并发运行的两种不同的动物。因此,他们对当前工作目录有不同的概念。具体来说,MATLAB的当前工作目录从加载时显示的默认目录开始,并将遵循您使用GUI或命令行执行的任何cd
命令。 JVM的当前工作目录是从java
二进制文件开始的目录。由于MATLAB从它的默认目录中执行此操作,因此该目录是JVM将考虑的当前目录,并且永远不会更改。
在MATLAB中获取工作目录使用pwd
。在Java中(在JavaSE JVM下)使用System.getProperty("user.dir")
。
不幸的是,在您的情况下,由于您希望使用相对于Java代码所在位置的路径,因此上述两种方法都不会使用。
cwd
返回的值传递到您的Java函数中。System.getProperty("user.dir")
来获取该目录。