2016-05-13 90 views
0

我的目标是从Java程序执行Matlab可执行文件。为了测试这种机制,我有一个Java程序,它接受输入并将值写入文件。 Matlab .exe被编程为读取文件并显示内容。 (一旦这个工作正常,我将继续主要的Matlab操作)。Matlab exe无法读取在Java中创建的文件

但不幸的是,我无法使用Matlab可执行文件打印文件的内容。 这是我的Java代码。

public class JavaMatlab_I_O 
{ 
    public void MatlabexeCall(String commandline) 
    { 
     try 
     { 
      String line; 
      Process p = Runtime.getRuntime().exec(commandline); 
      BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); 
      while ((line = input.readLine()) != null) 
      { 
       System.out.println(line); 
      } 
      input.close(); 
     } 
     catch (Exception err) 
     { 
      err.printStackTrace(); 
     } 
    } 
    public static void main(String[] args) 
    { 
     FileOutputStream fop = null; 
     File file; 
     String inp; 
     System.out.println("Enter Data: "); 
     Scanner obj = new Scanner(System.in); 
     inp = obj.next(); 
     try 
     { 
      file = new File("C:\\Users\\PritamDash\\Documents\\MATLAB\\TestFile2.txt"); 
      fop = new FileOutputStream(file); 
      // if file doesnt exists, then create it 
      if (!file.exists()) 
      { 
       file.createNewFile(); 
      } 

      // get the content in bytes 
      byte[] contentInBytes = inp.getBytes(); 
      fop.write(contentInBytes); 
      fop.flush(); 
      fop.close(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     JavaMatlab_I_O test = new JavaMatlab_I_O(); 
     test.MatlabexeCall("C:\\Users\\PritamDash\\Documents\\MATLAB\\myfunc1.exe"); 

     System.out.println("Done"); 
    } 
} 

Matlab代码

function myfunc1() 
    disp(importdata('TestFile2.txt')); 
end 

我使用MCC

mcc -mv myfunc1.m 

当我在MATLAB命令执行!myfunc1.exe提示它工作正常生成的exe。当我删除文件操作并使用myfunc1.exe来简单打印字符串时,从Java调用时它工作正常。 我无法确定为什么Java程序是无法触发文件读取Matlab中运行.exe文件

+0

这工作。感谢您的建议。 – Pritam

回答

0

尝试修改您的MATLAB函数:

disp(importdata('C:\Users\PritamDash\Documents\MATLAB\TestFile2.txt')); 
+0

但是,如果我在另一台机器上执行相同的.exe它不会工作。由于路径是静态的。 – Pritam

+0

您可以创建文本文件到Java中的固定路径,然后您可以使用该路径。我的意思是如果你使用例如C:\ yourdirectory \ xyz.txt,它应该存在。 这真的取决于你的用例。 以编程方式获取用户目录的另一种可能性,为此,此线程可以提供帮助:https://de.mathworks.com/matlabcentral/newsreader/view_thread/149027 – DVarga

+0

这个看起来很有趣。谢谢你的时间。! – Pritam